Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManager.java =================================================================== diff -u -r28359 -r28858 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManager.java (.../SterilizationRecordManager.java) (revision 28359) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManager.java (.../SterilizationRecordManager.java) (revision 28858) @@ -467,4 +467,10 @@ * @return */ public Boolean validateBiologyTousseBarcode(String monitorPackageBarcode); + + /** + * 暂存状态的灭菌记录开始灭菌 + * @param sterilizationRecord + */ + public void beginSterilization(SterilizationRecord sterilizationRecord); } Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/dwr/table/SterilizationRecordTableManager.java =================================================================== diff -u -r27081 -r28858 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/dwr/table/SterilizationRecordTableManager.java (.../SterilizationRecordTableManager.java) (revision 27081) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/dwr/table/SterilizationRecordTableManager.java (.../SterilizationRecordTableManager.java) (revision 28858) @@ -215,6 +215,10 @@ if(StringUtils.isNotBlank(frequency) && org.apache.commons.lang3.StringUtils.isNumeric(frequency)){ sql += " and po.frequency ="+frequency+""; } + // “暂存”状态的灭菌记录不需要干预,灭菌干预页面不显示“暂存”状态的灭菌记录 + if(StringUtils.isNotBlank(sqlWhereParamMap.get("isInterfereStr"))){ + sql += " and po.status != '" + SterilizationRecord.STERILIZATION_STATUS_DRAFT + "' "; + } String renderGrid = gridManager.renderGrid(parameterMap, SterilizationRecord.class.getSimpleName(), sql, new String[] { "tousseInstanceList", "reviewedBaskets", Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizationrecord/SterilizationRecord.java =================================================================== diff -u -r28660 -r28858 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizationrecord/SterilizationRecord.java (.../SterilizationRecord.java) (revision 28660) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizationrecord/SterilizationRecord.java (.../SterilizationRecord.java) (revision 28858) @@ -125,6 +125,10 @@ public static final String STERILIZATION_STATUS_BEGIN = "灭菌中"; public static final String STERILIZATION_STATUS_FAILURE = "灭菌失败"; public static final String STERILIZATION_STATUS_INTERRUPT = "灭菌中断"; + /** + * 暂存(HBSXKYY-19 灭菌记录支持暂存) + */ + public static final String STERILIZATION_STATUS_DRAFT = "暂存"; /** * 炉次 Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/action/SterilizationRecordAction.java =================================================================== diff -u -r27683 -r28858 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/action/SterilizationRecordAction.java (.../SterilizationRecordAction.java) (revision 27683) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/action/SterilizationRecordAction.java (.../SterilizationRecordAction.java) (revision 28858) @@ -319,28 +319,33 @@ //判断是否从干预页面进入 if(StringUtils.isNotBlank(isInterfereStr)){ if(isInterfereStr.equals("true")){ - //除了开始时间外,干预保存时几个时间字段(结束时间、生物监测观察时间、生物监测开始时间、生物监测结束时间等)都要回传,否则会时分秒都会变成0 - String endDateString = StrutsParamUtils.getPraramValue("endDate", null); - String biologicalMonitoringStartDateString = StrutsParamUtils.getPraramValue("biologicalMonitoringStartDate", null); - String biologicalMonitoringEndDateString = StrutsParamUtils.getPraramValue("biologicalMonitoringEndDate", null); - String biologicalObserveDateString = StrutsParamUtils.getPraramValue("biologicalObserveDateString", null); - if(StringUtils.isNotBlank(endDateString)){ - sterilizationRecord.setEndDate(ForgonDateUtils.safelyParseDate(endDateString)); + if(SterilizationRecord.STERILIZATION_STATUS_DRAFT.equals(sterilizationRecord.getStatus())){ + // HBSXKYY-19 灭菌记录支持暂存 + StrutsResponseUtils.output(false, "暂存状态的灭菌记录不需要干预!"); + } else { + //除了开始时间外,干预保存时几个时间字段(结束时间、生物监测观察时间、生物监测开始时间、生物监测结束时间等)都要回传,否则会时分秒都会变成0 + String endDateString = StrutsParamUtils.getPraramValue("endDate", null); + String biologicalMonitoringStartDateString = StrutsParamUtils.getPraramValue("biologicalMonitoringStartDate", null); + String biologicalMonitoringEndDateString = StrutsParamUtils.getPraramValue("biologicalMonitoringEndDate", null); + String biologicalObserveDateString = StrutsParamUtils.getPraramValue("biologicalObserveDateString", null); + if(StringUtils.isNotBlank(endDateString)){ + sterilizationRecord.setEndDate(ForgonDateUtils.safelyParseDate(endDateString)); + } + if(StringUtils.isNotBlank(biologicalMonitoringStartDateString)){ + sterilizationRecord.setBiologicalMonitoringStartDate(ForgonDateUtils.safelyParseDate(biologicalMonitoringStartDateString)); + } + if(StringUtils.isNotBlank(biologicalMonitoringEndDateString)){ + sterilizationRecord.setBiologicalMonitoringEndDate(ForgonDateUtils.safelyParseDate(biologicalMonitoringEndDateString)); + } + if(StringUtils.isNotBlank(biologicalObserveDateString)){ + sterilizationRecord.setBiologicalObserveDate(ForgonDateUtils.safelyParseDate(biologicalObserveDateString)); + } + + Map result =sterilizationRecordManager.updateSterilizationRecordInterfere( + sterilizationRecord, tousseInstanceBarcodes, + containerBarcodes, originalRecordId,barcodePositionMap, delTousseJsonArr); + StrutsResponseUtils.output(JSONObject.fromObject(result)); } - if(StringUtils.isNotBlank(biologicalMonitoringStartDateString)){ - sterilizationRecord.setBiologicalMonitoringStartDate(ForgonDateUtils.safelyParseDate(biologicalMonitoringStartDateString)); - } - if(StringUtils.isNotBlank(biologicalMonitoringEndDateString)){ - sterilizationRecord.setBiologicalMonitoringEndDate(ForgonDateUtils.safelyParseDate(biologicalMonitoringEndDateString)); - } - if(StringUtils.isNotBlank(biologicalObserveDateString)){ - sterilizationRecord.setBiologicalObserveDate(ForgonDateUtils.safelyParseDate(biologicalObserveDateString)); - } - - Map result =sterilizationRecordManager.updateSterilizationRecordInterfere( - sterilizationRecord, tousseInstanceBarcodes, - containerBarcodes, originalRecordId,barcodePositionMap, delTousseJsonArr); - StrutsResponseUtils.output(JSONObject.fromObject(result)); } }else{ Map result = sterilizationRecordManager.saveOrUpdateSterilizationRecord( @@ -2002,7 +2007,17 @@ } } - - - + /** + * 暂存状态的灭菌记录开始灭菌(HBSXKYY-19 灭菌记录支持暂存) + */ + public void beginSterilization(){ + try { + sterilizationRecordManager.beginSterilization(sterilizationRecord); + JSONObject jSONObj = JSONUtil.buildJsonObject(true, "开始灭菌"); + StrutsResponseUtils.output(jSONObj); + } catch (Exception e) { + JSONObject jSONObj = JSONUtil.buildJsonObject(false, e.getMessage()); + StrutsResponseUtils.output(jSONObj); + } + } } Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java =================================================================== diff -u -r28828 -r28858 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 28828) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 28858) @@ -89,6 +89,7 @@ import com.forgon.disinfectsystem.vo.SimpleInfoVo; import com.forgon.disinfectsystem.vo.TousseSimpleVO; import com.forgon.exception.SterilingModeNotTheSameException; +import com.forgon.exception.SystemException; import com.forgon.exception.service.ExceptionHandler; import com.forgon.log.model.Log; import com.forgon.log.service.LogManager; @@ -99,6 +100,7 @@ import com.forgon.tools.MathTools; import com.forgon.tools.Path; import com.forgon.tools.StrutsParamUtils; +import com.forgon.tools.StrutsResponseUtils; import com.forgon.tools.date.DateTools; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.db.InitDbConnection; @@ -1416,8 +1418,8 @@ Map barcodePositionMap, JSONArray delTousseJsonArr) { Map result = new HashMap(); String status = sterilizationRecord.getStatus(); - //注意:如果灭菌状态不是“空”或者“灭菌中”,不给保存,防止不规范的操作。 - if (!(StringUtils.isBlank(status) || SterilizationRecord.STERILIZATION_STATUS_BEGIN.equals(status))) { + //注意:如果灭菌状态不是“空”或者“灭菌中”或者“暂存”,不给保存,防止不规范的操作。 + if (!(StringUtils.isBlank(status) || SterilizationRecord.STERILIZATION_STATUS_BEGIN.equals(status) || SterilizationRecord.STERILIZATION_STATUS_DRAFT.equals(status))) { result.put(JSONUtil.JSON_KEY_SUCCESS, false); result.put(JSONUtil.JSON_KEY_MESSAGE, String.format("灭菌记录状态是[%s],保存失败!", status)); return result; @@ -1433,7 +1435,7 @@ return result; } // 新加灭菌记录,校验 - if(!isAllSterilizationEnd(sr.getName())){ + if(!SterilizationRecord.STERILIZATION_STATUS_DRAFT.equals(status) && !isAllSterilizationEnd(sr.getName())){ result.put(JSONUtil.JSON_KEY_SUCCESS, false); result.put(JSONUtil.JSON_KEY_MESSAGE, "灭菌炉正在灭菌中"); return result; @@ -1464,8 +1466,8 @@ + " and b.barcode in (" + StringUtils.join(tousseInstanceBarcodesInclude.toArray() , ",") + ") and t.tousseFixedBarcode=0 " + " and t.id in (select tousseInstance_id from sterilization_tousseInstance where sterilizationRecord_id in (select id from SterilizationRecord where 1=1 " + ((sterilizationRecord.getId() == null || sterilizationRecord.getId() == 0 ) ? "" : " and id <> " + sterilizationRecord.getId() + " ") - + " and status in ('" + SterilizationRecord.STERILIZATION_STATUS_BEGIN + "','" + SterilizationRecord.STERILIZATION_STATUS_END + "') ) )"; - //根据器械包条码判断器械包是否有器械包状态为灭菌中或已灭菌 + + " and status in ('" + SterilizationRecord.STERILIZATION_STATUS_BEGIN + "','" + SterilizationRecord.STERILIZATION_STATUS_END + "','" + SterilizationRecord.STERILIZATION_STATUS_DRAFT + "') ) )"; + //根据器械包条码判断器械包是否有器械包状态为灭菌中或已灭菌或灭菌暂存 List tousseBarcodeList = new ArrayList(); ResultSet rs = objectDao.executeSql(sql); try { @@ -1528,11 +1530,16 @@ && sterilizationRecord.getId() <= 0) { sterilizationRecord.setId(null); // 新增记录,则把灭菌时间设定为当前时间 - sterilizationRecord.setStartDate(new Date()); + if(!SterilizationRecord.STERILIZATION_STATUS_DRAFT.equals(sterilizationRecord.getStatus())){ + sterilizationRecord.setStartDate(new Date()); + } else { + sterilizationRecord.setStartDate(null); + } } - sterilizationRecord - .setStatus(SterilizationRecord.STERILIZATION_STATUS_BEGIN); + if(!SterilizationRecord.STERILIZATION_STATUS_DRAFT.equals(sterilizationRecord.getStatus())){ + sterilizationRecord.setStatus(SterilizationRecord.STERILIZATION_STATUS_BEGIN); + } // 由灭菌炉名称查找并设定记录的灭菌炉 if (StringUtils.isNotBlank(sterilizationRecord.getSterilizerName())) { @@ -1717,7 +1724,9 @@ tousseInstance.setSterileFrequency(sterilizationRecord.getFrequency()+""); //(cjr) tousseInstance.setSterilizationUser(sterilizationRecord.getSterilizationUser()); tousseInstance.setSterilizerName(sterilizationRecord.getSterilizerName()); - tousseInstance.setSterileStartTime(TousseInstanceUtils.buildSterileStartTime(sterilizationRecord.getStartDate())); + if(!SterilizationRecord.STERILIZATION_STATUS_DRAFT.equals(sterilizationRecord.getStatus())){ + tousseInstance.setSterileStartTime(TousseInstanceUtils.buildSterileStartTime(sterilizationRecord.getStartDate())); + } tousseInstanceManager.save(tousseInstance); //如果是聚合包,则将该聚合包下属的普通器械包实例也相应赋值 @@ -1773,7 +1782,8 @@ + param.toString() + msg); } - if (Constants.STR_YES.equals(sterilizer.getTimingCompleteSterilization())) { + // 暂存的灭菌记录不可以自动完成灭菌 + if (SterilizationRecord.STERILIZATION_STATUS_BEGIN.equals(sterilizationRecord.getStatus()) && Constants.STR_YES.equals(sterilizer.getTimingCompleteSterilization())) { //定时自动完成灭菌 Sterilisation sterilisation = sterilisationManager.getSterilisationByName(sterilizationRecord.getSterilizationType()); //灭菌程序 if(sterilisation != null && sterilisation.getUseTime() != null && sterilisation.getUseTime() > 0){ @@ -2941,6 +2951,10 @@ if(sr == null){ return JSONUtil.buildJsonObject(false, "干预失败,找不到灭菌记录."); } + // HBSXKYY-19 灭菌记录支持暂存 + if(SterilizationRecord.STERILIZATION_STATUS_DRAFT.equals(sr.getStatus())){ + return JSONUtil.buildJsonObject(false, "暂存状态的灭菌记录不需要干预!"); + } // 校验干预信息是否允许 Integer fre = null; if(StringUtils.isNotBlank(frequency) && StringUtils.isNumeric(frequency)){ @@ -5653,5 +5667,77 @@ return true; } + + @Override + public void beginSterilization(SterilizationRecord sterilizationRecord) { + if(sterilizationRecord == null || !DatabaseUtil.isPoIdValid(sterilizationRecord.getId())){ + throw new SystemException("灭菌记录不存在!"); + } + if(!SterilizationRecord.STERILIZATION_STATUS_DRAFT.equals(sterilizationRecord.getStatus())){ + throw new SystemException("只能选择1条处于暂存状态的灭菌记录!"); + } + // 获取已灭菌的灭菌记录的灭菌炉的最大炉次 + int maxFrequency = getFirstFrequencyOfDraftSterilizationRecord(sterilizationRecord.getSterilizer(), sterilizationRecord.getId()); + if(maxFrequency != sterilizationRecord.getFrequency().intValue()){ + throw new SystemException("请选择正确的炉次开始灭菌!"); + } + sterilizationRecord.setStatus(SterilizationRecord.STERILIZATION_STATUS_BEGIN); + sterilizationRecord.setStartDate(new Date()); + List tousseInstances = sterilizationRecord.getTousseInstanceList(); + if(CollectionUtils.isNotEmpty(tousseInstances)){ + String dateStr = TousseInstanceUtils.buildSterileStartTime(sterilizationRecord.getStartDate()); + for (TousseInstance tousseInstance : tousseInstances) { + tousseInstance.setSterileStartTime(dateStr); + } + } + objectDao.batchSaveOrUpdate(tousseInstances); + objectDao.save(sterilizationRecord); + } + /** + * 获取可以开始灭菌的,状态为暂存的灭菌记录的炉次(HBSXKYY-19灭菌记录支持暂存) + * @param sterilizer + * @param id + * @return + */ + private int getFirstFrequencyOfDraftSterilizationRecord(Sterilizer sterilizer, Long id) { + if (sterilizer != null && sterilizer.getId() != null) { + if (id == null || id < 0) { + id = 0L; + } + try { + String sql = "select max(re.frequency) from sterilizationrecord re" + + " where re.sterilizer_id = " + + sterilizer.getId() + + " and re.id <> " + id + + " and re.status not in ('" + SterilizationRecord.STERILIZATION_STATUS_DRAFT +"','" + SterilizationRecord.STERILIZATION_STATUS_BEGIN +"')"; + + String isEveryDayReset = sterilizer.getIsEveryDayReset();// 是否隔天重置炉次 + if (!"否".equals(isEveryDayReset)) { + Date out_beginTime = new Date(); + Date out_endTime = new Date(); + supplyRoomConfigManager.getTodayTimeQuantum(out_beginTime, out_endTime); + sql += " and re.startDate between " + + dateQueryAdapter + .dateAdapter(out_beginTime) + + " and " + + dateQueryAdapter.dateAdapter(out_endTime); + } + ResultSet rs = objectDao.executeSql(sql); + try { + if (rs != null && rs.next()) { + return (int) rs.getLong(1) + 1; + } + } catch (Exception e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + return DEFALUT_VALUE; + } + }