Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java =================================================================== diff -u -r28904 -r28908 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 28904) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 28908) @@ -1479,6 +1479,16 @@ isNewRecord = true; } + // 在新建灭菌记录,或者编辑暂存状态的灭菌记录时,允许修改炉次,需要验证炉次是否正确(HBSXKYY-19) + if(SterilizationRecord.STERILIZATION_STATUS_DRAFT.equals(status)){ + SterilizationRecord record = getSterilizationRecordBySterilizerFrequency(sterilizationRecord.getSterilizer(), sterilizationRecord.getFrequency(), sterilizationRecord.getId()); + if(record != null){ + result.put(JSONUtil.JSON_KEY_SUCCESS, false); + result.put(JSONUtil.JSON_KEY_MESSAGE, "此炉次已经被使用,请确认!"); + return result; + } + } + result.put(JSONUtil.JSON_KEY_SUCCESS, true); //器械包条码增加单引号 Collection tousseInstanceBarcodesInclude = new ArrayList(); @@ -5699,11 +5709,14 @@ if(!SterilizationRecord.STERILIZATION_STATUS_DRAFT.equals(sterilizationRecord.getStatus())){ throw new SystemException("只能选择1条处于暂存状态的灭菌记录!"); } - // 获取暂存状态的灭菌记录的最小炉次 - int minFrequency = getFirstFrequencyOfDraftSterilizationRecord(sterilizationRecord); - if(minFrequency != sterilizationRecord.getFrequency().intValue()){ + // 根据灭菌炉获取炉次最小、最早添加的暂存状态的灭菌记录 + SterilizationRecord firstSterilizationRecord = getFirstDraftSterilizationRecord(sterilizationRecord.getSterilizer()); + if(firstSterilizationRecord != null && sterilizationRecord != null && firstSterilizationRecord.getId().longValue() != sterilizationRecord.getId().longValue()){ throw new SystemException("请选择正确的炉次开始灭菌!"); } + if(!isAllSterilizationEnd(sterilizationRecord.getSterilizer().getName())){ + throw new SystemException("灭菌炉正在灭菌中!"); + } sterilizationRecord.setStatus(SterilizationRecord.STERILIZATION_STATUS_BEGIN); sterilizationRecord.setStartDate(new Date()); List tousseInstances = sterilizationRecord.getTousseInstanceList(); @@ -5718,34 +5731,65 @@ } /** - * 获取暂存状态的灭菌记录的最早炉次(HBSXKYY-19灭菌记录支持暂存) + * 根据灭菌炉获取炉次最小、最早添加的暂存状态的灭菌记录;用于判断选中暂存状态的灭菌记录是否可以开始灭菌(HBSXKYY-19灭菌记录支持暂存) * @param sterilizer * @param id * @return */ @SuppressWarnings("unchecked") - private int getFirstFrequencyOfDraftSterilizationRecord(SterilizationRecord sterilizationRecord) { - if(sterilizationRecord == null || !DatabaseUtil.isPoIdValid(sterilizationRecord.getId())){ - return 0; - } - Sterilizer sterilizer = sterilizationRecord.getSterilizer(); + private SterilizationRecord getFirstDraftSterilizationRecord(Sterilizer sterilizer) { if (sterilizer != null && sterilizer.getId() != null) { try { - String hql = " from SterilizationRecord re" - + " where re.sterilizer.id = " - + sterilizer.getId() - + " and re.status = '" + SterilizationRecord.STERILIZATION_STATUS_DRAFT + "' " - + " order by re.id asc"; + String hql = String.format(" from %s re where re.sterilizer.id = %s " + + " and re.status = '%s' " + + " order by %s asc, frequency asc", + SterilizationRecord.class.getSimpleName(), sterilizer.getId(), + SterilizationRecord.STERILIZATION_STATUS_DRAFT, dateQueryAdapter.dateToVarchar1("re.startDate")); List sterilizationRecords = objectDao.findByHql(hql); if(CollectionUtils.isNotEmpty(sterilizationRecords)){ - return sterilizationRecords.get(0).getFrequency(); + return sterilizationRecords.get(0); } } catch (Exception e) { e.printStackTrace(); } } - return DEFALUT_VALUE; + return null; } + + /** + * 根据灭菌炉及炉次获取灭菌记录,用于判断炉次是否已被使用(HBSXKYY-19) + * @param sr + * @param frequency + * @param long1 + * @return + */ + @SuppressWarnings("unchecked") + private SterilizationRecord getSterilizationRecordBySterilizerFrequency(Sterilizer sterilizer, Integer frequency, Long sterilizationRecordId) { + if (sterilizer == null || sterilizer.getId() == null) { + return null; + } + String hql = " from SterilizationRecord re" + + " where re.sterilizer.id = " + + sterilizer.getId() + + " and re.id <> " + sterilizationRecordId + + " and re.frequency = " + frequency; + String isEveryDayReset = sterilizer.getIsEveryDayReset();// 是否隔天重置炉次 + if (!"否".equals(isEveryDayReset)) { + Date out_beginTime = new Date(); + Date out_endTime = new Date(); + supplyRoomConfigManager.getTodayTimeQuantum(out_beginTime, out_endTime); + hql += " and re.startDate between " + + dateQueryAdapter + .dateAdapter(out_beginTime) + + " and " + + dateQueryAdapter.dateAdapter(out_endTime); + } + List sterilizationRecords = objectDao.findByHql(hql); + if(CollectionUtils.isNotEmpty(sterilizationRecords)){ + return sterilizationRecords.get(0); + } + return null; + } }