Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java =================================================================== diff -u -r28900 -r28904 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 28900) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 28904) @@ -107,6 +107,7 @@ import com.forgon.tools.hibernate.BasePoManagerImpl; import com.forgon.tools.json.JSONUtil; import com.forgon.tools.string.StringTools; +import com.forgon.tools.util.ConfigUtils; import com.forgon.tools.util.ForgonDateUtils; import com.forgon.tools.util.SqlUtils; import com.google.common.collect.Maps; @@ -424,6 +425,11 @@ if(CollectionUtils.isEmpty(records)){ return JSONUtil.buildJsonObject(false, "未找到对应的灭菌单"); } + for (SterilizationRecord sterilizationRecord : records) { + if(StringUtils.equals(SterilizationRecord.STERILIZATION_STATUS_DRAFT, sterilizationRecord.getStatus())){ + return JSONUtil.buildJsonObject(false, "暂存状态的灭菌记录不能完成灭菌!"); + } + } SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); List goodsStockList = new ArrayList(); try{ @@ -1441,6 +1447,23 @@ result.put(JSONUtil.JSON_KEY_MESSAGE, "灭菌炉正在灭菌中"); return result; } + + // 有暂存状态灭菌记录的灭菌炉,不允许添加新的灭菌记录开始灭菌,需要先选择“暂存”状态的灭菌记录开始灭菌 + boolean enableSterilizationDraftStatus = ConfigUtils.getSystemSetConfigByNameBool("enableSterilizationDraftStatus"); + if(!SterilizationRecord.STERILIZATION_STATUS_DRAFT.equals(status) && enableSterilizationDraftStatus){ + String sql = String + .format("where po.sterilizer.id = %s" + + " and (po.status = '%s' or po.status = '%s' or po.status = '%s')", sr.getId(), + SterilizationRecord.STERILIZATION_STATUS_BEGIN,SterilizationRecord.STERILIZATION_STATUS_INTERRUPT, + SterilizationRecord.STERILIZATION_STATUS_DRAFT); + int count = objectDao.countObjectBySql(SterilizationRecord.class.getSimpleName(), sql); + if(count > 0){ + result.put(JSONUtil.JSON_KEY_SUCCESS, false); + result.put(JSONUtil.JSON_KEY_MESSAGE, "灭菌炉有暂存的灭菌记录,请先选择暂存的灭菌记录开始灭菌"); + return result; + } + } + Integer frequency = sterilizationRecord.getFrequency(); if(frequency == null){ result.put(JSONUtil.JSON_KEY_SUCCESS, false); @@ -5676,9 +5699,9 @@ if(!SterilizationRecord.STERILIZATION_STATUS_DRAFT.equals(sterilizationRecord.getStatus())){ throw new SystemException("只能选择1条处于暂存状态的灭菌记录!"); } - // 获取已灭菌的灭菌记录的灭菌炉的最大炉次 - int maxFrequency = getFirstFrequencyOfDraftSterilizationRecord(sterilizationRecord.getSterilizer(), sterilizationRecord.getId()); - if(maxFrequency != sterilizationRecord.getFrequency().intValue()){ + // 获取暂存状态的灭菌记录的最小炉次 + int minFrequency = getFirstFrequencyOfDraftSterilizationRecord(sterilizationRecord); + if(minFrequency != sterilizationRecord.getFrequency().intValue()){ throw new SystemException("请选择正确的炉次开始灭菌!"); } sterilizationRecord.setStatus(SterilizationRecord.STERILIZATION_STATUS_BEGIN); @@ -5691,48 +5714,33 @@ } } objectDao.batchSaveOrUpdate(tousseInstances); - objectDao.save(sterilizationRecord); + objectDao.saveOrUpdate(sterilizationRecord); } /** - * 获取可以开始灭菌的,状态为暂存的灭菌记录的炉次(HBSXKYY-19灭菌记录支持暂存) + * 获取暂存状态的灭菌记录的最早炉次(HBSXKYY-19灭菌记录支持暂存) * @param sterilizer * @param id * @return */ - private int getFirstFrequencyOfDraftSterilizationRecord(Sterilizer sterilizer, Long id) { + @SuppressWarnings("unchecked") + private int getFirstFrequencyOfDraftSterilizationRecord(SterilizationRecord sterilizationRecord) { + if(sterilizationRecord == null || !DatabaseUtil.isPoIdValid(sterilizationRecord.getId())){ + return 0; + } + Sterilizer sterilizer = sterilizationRecord.getSterilizer(); 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 = " + String hql = " 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); + + " and re.status = '" + SterilizationRecord.STERILIZATION_STATUS_DRAFT + "' " + + " order by re.id asc"; + List sterilizationRecords = objectDao.findByHql(hql); + if(CollectionUtils.isNotEmpty(sterilizationRecords)){ + return sterilizationRecords.get(0).getFrequency(); } - 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(); }