Index: ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManagerImpl.java =================================================================== diff -u -r34103 -r34109 --- ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManagerImpl.java (.../WashAndDisinfectRecordManagerImpl.java) (revision 34103) +++ ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManagerImpl.java (.../WashAndDisinfectRecordManagerImpl.java) (revision 34109) @@ -426,14 +426,52 @@ * @param oldRinserName 修改前清洗机名称 */ private void addConsumptiveMaterialReturnRecord(WashAndDisinfectRecord washRecord, String oldRinserName, String oldDisinfectProgram) { - String sql = String.format("select po from %s po inner join po.details d where d.useAmount > 0 and po.washAndDisinfectRecordId = %s and po.cleanMethod = '%s' and po.rinserName = '%s' order by po.id desc ", + + boolean enableRinserConsumptiveMaterialConsumptionFunction = + ConfigUtils.getSystemSetConfigByNameBool("enableRinserConsumptiveMaterialConsumptionFunction"); + if(!enableRinserConsumptiveMaterialConsumptionFunction){ + return; + } + + //获取清洗机容器的耗材余量 + Map consumptiveMaterialTypeMap = new HashMap(); + Rinser rinser = null; + if(StringUtils.isNotBlank(oldRinserName) && !StringUtils.equals(oldRinserName, washRecord.getDisinfectIdentification())){ + //如果是干预清洗记录修改清洗机,需要把消耗的耗材余量返还给旧清洗机的容器 + rinser = rinserManager.getRinserByName(oldRinserName); + }else{ + rinser = rinserManager.get(washRecord.getRinserId()); + } + if(rinser != null){ + //获取清洗机容器,用于接收返还的耗材余量;如果获取不到清洗机容器,就只记录消耗的参数值为负值的使用记录,而且使用记录的耗材余量没值 + ConsumptiveMaterialContainer container = rinser.getConsumptiveMaterialContainer(); + if(container != null){ + List volumes = container.getConsumptiveMaterialVolumes(); + if(CollectionUtils.isNotEmpty(volumes)){ + for (ConsumptiveMaterialVolume consumptiveMaterialVolume : volumes) { + ConsumptiveMaterialType type = consumptiveMaterialVolume.getConsumptiveMaterialType(); + if(type != null){ + consumptiveMaterialTypeMap.put(type, consumptiveMaterialVolume); + } + } + } + } + } + + String sql = String.format("select po from %s po where po.washAndDisinfectRecordId = %s and po.cleanMethod = '%s' and po.rinserName = '%s' order by po.id desc ", ConsumptiveMaterialUseRecord.class.getSimpleName(), washRecord.getId(), oldDisinfectProgram, oldRinserName); + @SuppressWarnings("unchecked") List recordList = objectDao.findByHql(sql, 0, 1); if(CollectionUtils.isNotEmpty(recordList)){ ConsumptiveMaterialUseRecord oldRecord = recordList.get(0); + List details = oldRecord.getDetails(); + if(CollectionUtils.isEmpty(details) || details.get(0).getUseAmount().longValue() < 0){ + //清洗记录没有消耗耗材,或者耗材已经在上次修改清洗机或者清洗程序时,返还给清洗机容器了(耗材使用数量为0)。此时不需要再产生返还耗材的消耗记录 + return; + } ConsumptiveMaterialUseRecord newRecord = new ConsumptiveMaterialUseRecord(); newRecord.setOperationDateTime(new Date()); newRecord.setCleanMethod(oldRecord.getCleanMethod()); @@ -449,10 +487,17 @@ if(CollectionUtils.isNotEmpty(oldDetails)){ List newDetails = new ArrayList(); for (ConsumptiveMaterialUseDetail consumptiveMaterialUseDetail : oldDetails) { + ConsumptiveMaterialType type = consumptiveMaterialUseDetail.getConsumptiveMaterialType(); ConsumptiveMaterialUseDetail detail = new ConsumptiveMaterialUseDetail(); - detail.setConsumptiveMaterialType(consumptiveMaterialUseDetail.getConsumptiveMaterialType()); - detail.setConsumptiveMaterialVolumn(consumptiveMaterialUseDetail.getConsumptiveMaterialVolumn()); + detail.setConsumptiveMaterialType(type); detail.setUseAmount(consumptiveMaterialUseDetail.getUseAmount() * -1l); + //容器耗材种类的余量添加返回的数量 + ConsumptiveMaterialVolume v = consumptiveMaterialTypeMap.get(type); + if(v != null){ + v.setVolume(v.getVolume() + consumptiveMaterialUseDetail.getUseAmount()); + objectDao.saveOrUpdate(v); + detail.setConsumptiveMaterialVolumn(v.getVolume()); + } objectDao.save(detail); newDetails.add(detail); }