Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/toussetransition/service/TousseTransitionRecordManagerImpl.java =================================================================== diff -u -r17849 -r17859 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/toussetransition/service/TousseTransitionRecordManagerImpl.java (.../TousseTransitionRecordManagerImpl.java) (revision 17849) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/toussetransition/service/TousseTransitionRecordManagerImpl.java (.../TousseTransitionRecordManagerImpl.java) (revision 17859) @@ -22,6 +22,8 @@ import com.forgon.disinfectsystem.entity.toussetransition.TousseTransitionPlan; import com.forgon.disinfectsystem.entity.toussetransition.TousseTransitionPlanItem; import com.forgon.disinfectsystem.entity.toussetransition.TousseTransitionRecord; +import com.forgon.disinfectsystem.entity.useRecord.UseRecord; +import com.forgon.disinfectsystem.entity.useRecord.UseRecordToRecycleApplication; import com.forgon.disinfectsystem.recyclingapplication.service.InvoicePlanManager; import com.forgon.disinfectsystem.recyclingapplication.service.RecyclingApplicationManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; @@ -168,14 +170,20 @@ TousseDefinition td = tousseDefinitionManager .getTousseDefinitionById(td_id); if (td != null) { - tousseItem = new TousseItem(); - if(transitionVersion2){ - tousseItem.setAmount(0); - }else{ - tousseItem.setAmount(prepareRecycleAmount); + //先在申请单中看是否能找到包定义对应的申请单,如果没有找到,再合建。 + //场景:使用记录1转换申请单,有包1和包2,包1已经预回收,包2预回收数量为0 + //这时候,使用记录2转换申请单,合并到之前的申请单中,这时候需要预回收包2,但是在第二张预见回收单上,是没有包2的 + tousseItem = tousseItemManager.find(plan.getApplicationItems(), td.getId()); + if(tousseItem == null){ + tousseItem = new TousseItem(); + if(transitionVersion2){ + tousseItem.setAmount(0); + }else{ + tousseItem.setAmount(prepareRecycleAmount); + } } - - tousseItem.setPrepareRecycleAmount(prepareRecycleAmount); + tousseItem.setPrepareRecycleAmount(MathTools.add( + tousseItem.getPrepareRecycleAmount(), prepareRecycleAmount).intValue()); String tousseName = td.getName(); if (td.isDisinfection()) { recyclingApplicationManager.addDisinfectTousseItem(plan, prepareRecycleAmount, @@ -282,14 +290,38 @@ String msg = String.format("条码为%s的器械包未添加使用记录", tousseInstance.getBarcode()); throw new RuntimeException(msg); }else{ - RecyclingApplication app = recyclingApplicationManager.getRecyclingApplication(tousseInstance.getUseRecord_id()); + List rtrs = objectDao.findByProperty( + UseRecordToRecycleApplication.class.getSimpleName(), "useRecordId", tousseInstance.getUseRecord_id().toString()); + UseRecordToRecycleApplication useRecordToRecycleApplication = null; + for(UseRecordToRecycleApplication rtr : rtrs){ + if(recyclingApplicationId.equals(rtr.getInvoicePlanId())){ + useRecordToRecycleApplication = rtr; + break; + } + } + RecyclingApplication app = null; + if(useRecordToRecycleApplication != null){ + //包实例的使用记录,有与当前申请单合并的记录 + app = recyclingApplicationManager.getRecyclingApplicationById(recyclingApplicationId.toString()); + } + if(app == null){ String msg = String.format("未找到条码为%s的器械包的使用记录转换的申请单", tousseInstance.getBarcode()); throw new RuntimeException(msg); } - if(app.getId().longValue() != recyclingApplicationId.longValue()){ - String msg = String.format("条码为%s的器械包由病人%s使用", tousseInstance.getBarcode(),app.getUseRecord().getPatientName()); - throw new RuntimeException(msg); + //如果是按手术间合并,那相同手术间的包实例是可以合并回收的,不同的病人也可以 + String mergeRegular = CssdUtils.getSystemSetConfigByName("useRecordConvertRecyclingApplicationMergeRegular"); + if(UseRecord.CONVERT_RECYCLINGMANAGER_MERGE_REGULAR_OPERATIONROOM.equals(mergeRegular)){ + RecyclingApplication ra = recyclingApplicationManager.getRecyclingApplicationById(recyclingApplicationId.toString()); + if(!StringTools.equals(ra.getOperationRoom(), app.getOperationRoom())){ + throw new RuntimeException(String.format("条码为%s的器械包由病人%s使用,手术 间号%s", + tousseInstance.getBarcode(),app.getUseRecord().getPatientSex(),app.getOperationRoom())); + } + }else{ + if(app.getId().longValue() != recyclingApplicationId.longValue()){ + String msg = String.format("条码为%s的器械包由病人%s使用", tousseInstance.getBarcode(),app.getUseRecord().getPatientName()); + throw new RuntimeException(msg); + } } } Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousseitem/service/TousseItemManager.java =================================================================== diff -u -r17849 -r17859 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousseitem/service/TousseItemManager.java (.../TousseItemManager.java) (revision 17849) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousseitem/service/TousseItemManager.java (.../TousseItemManager.java) (revision 17859) @@ -1,5 +1,7 @@ package com.forgon.disinfectsystem.tousseitem.service; +import java.util.Collection; + import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import com.forgon.tools.hibernate.BasePoManager; @@ -18,5 +20,12 @@ * 申请项是否已经发货完成 */ public boolean sendComplete(TousseItem tousseItem); + /** + * 在申请项集合中查找指定包定义的对象 + * @param items + * @param tousseDefinitionId + * @return + */ + public TousseItem find(Collection items,Long tousseDefinitionId); } Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousseitem/service/TousseItemManagerImpl.java =================================================================== diff -u -r17849 -r17859 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousseitem/service/TousseItemManagerImpl.java (.../TousseItemManagerImpl.java) (revision 17849) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousseitem/service/TousseItemManagerImpl.java (.../TousseItemManagerImpl.java) (revision 17859) @@ -1,7 +1,10 @@ package com.forgon.disinfectsystem.tousseitem.service; import java.sql.ResultSet; +import java.util.Collection; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.Predicate; import org.apache.commons.lang.StringUtils; import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; @@ -112,4 +115,17 @@ } return MathTools.sub(needSendAmount, tousseItem.getSendOutAmount()).intValue() == 0; } + + @Override + public TousseItem find(Collection items, Long tousseDefinitionId) { + if(CollectionUtils.isEmpty(items) || tousseDefinitionId == null){ + return null; + } + return CollectionUtils.find(items, new Predicate(){ + @Override + public boolean evaluate(TousseItem object) { + return object != null && tousseDefinitionId.equals(object.getTousseDefinitionId()); + } + }); + } }