Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java =================================================================== diff -u -r36194 -r36195 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 36194) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 36195) @@ -6365,6 +6365,7 @@ } Map> tousseItemIdMapTousseInstances = tousseInstanceManager.groupByTousseItemId(tousseInstances); + Map useRecordMap = getUseRecordByTousseInstances(tousseInstances); if(CollectionUtils.isNotEmpty(applicationItems)){ for (TousseItem tousseItem : applicationItems) { if(BooleanUtils.isTrue(tousseItem.getIsTerminated())) @@ -6383,12 +6384,11 @@ } } TousseItemVo itemVo = tousseItemManager.tousseItem2TousseItemVo(tousseItem); - itemVo.setErrorRemark(tousseInstanceManager.mergeErrorRemark(tousseItemIdMapTousseInstances.get(tousseItem.getId()))); - itemVo.setDamageRemark(tousseInstanceManager.mergeDamageRemark(tousseItemIdMapTousseInstances.get(tousseItem.getId()))); + List tis = tousseItemIdMapTousseInstances.get(tousseItem.getId()); + itemVo.setErrorRemark(tousseInstanceManager.mergeErrorRemark(tis)); + itemVo.setDamageRemark(tousseInstanceManager.mergeDamageRemark(tis)); // 关联使用记录的手术间和巡回护士 - Map useRecordMap = getUseRecordByTousseInstances(tousseItemIdMapTousseInstances.get(tousseItem.getId())); - itemVo.setOperationRoom(getOperationRoomFromTousseInstances(useRecordMap)); - itemVo.setCircuitNurse(getCircuitNurseFromTousseInstances(useRecordMap)); + setUseRecordInfo(itemVo, useRecordMap, tis); if(tdMap.containsKey(tousseItem.getTousseDefinitionId())){ itemVo.setTaskGroup(tdMap.get(tousseItem.getTousseDefinitionId()).getTaskGroup()); } @@ -6404,62 +6404,58 @@ * @param list * @return */ - private Map getUseRecordByTousseInstances(List list) { - if(CollectionUtils.isNotEmpty(list)){ - List useRecordIdList = new ArrayList(); - Map useRecordMap = new HashMap(); - for (TousseInstance ti : list) { - UseRecord useRecord = ti.getUseRecord(objectDao); - if(useRecord != null){ - Long useRecordId = useRecord.getId(); - if(useRecordIdList.contains(useRecordId)){ - continue; - } - useRecordIdList.add(useRecordId); - useRecordMap.put(ti, useRecord); - } + private Map getUseRecordByTousseInstances(List list) { + Map useRecordMap = new HashMap(); + if(CollectionUtils.isEmpty(list)){ + return useRecordMap; + } + Set ids = new HashSet(); + for (TousseInstance ti : list) { + if(DatabaseUtil.isPoIdValid(ti.getUseRecord_id())){ + ids.add(ti.getUseRecord_id()); } + } + StringBuffer sbf = new StringBuffer(); + sbf.append("select po from "); + sbf.append(UseRecord.class.getSimpleName()); + sbf.append(" po where "); + sbf.append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.id", ids)); + @SuppressWarnings("unchecked") + List useRecords = objectDao.findByHql(sbf.toString()); + if(CollectionUtils.isEmpty(useRecords)){ return useRecordMap; } - return null; - } - - /** - * 获取包实例的使用记录巡回护士 - * @param useRecordMap - * @return - */ - private String getCircuitNurseFromTousseInstances(Map useRecordMap) { - if(useRecordMap != null && !useRecordMap.isEmpty()){ - List circuitNurseList = new ArrayList(); - for (TousseInstance ti : useRecordMap.keySet()) { - UseRecord useRecord = useRecordMap.get(ti); - if(useRecord != null){ - circuitNurseList.add(useRecord.getCircuitNurse()); + for (UseRecord useRecord : useRecords) { + for (TousseInstance ti : list) { + if(MathTools.equals(ti.getUseRecord_id(), useRecord.getId())){ + useRecordMap.put(ti.getId(), useRecord); } } - return StringTools.join(circuitNurseList, ";"); } - return null; + return useRecordMap; } - /** - * 获取包实例的使用记录的手术间 + * 给itemVo设置使用记录的一些信息 + * @param itemVo * @param useRecordMap - * @return + * @param tis */ - private String getOperationRoomFromTousseInstances(Map useRecordMap) { - if(useRecordMap != null && !useRecordMap.isEmpty()){ + private void setUseRecordInfo(TousseItemVo itemVo, Map useRecordMap, List tis){ + if(useRecordMap.size() > 0){ List operationRoomList = new ArrayList(); - for (TousseInstance ti : useRecordMap.keySet()) { - UseRecord useRecord = useRecordMap.get(ti); - if(useRecord != null){ + List circuitNurseList = new ArrayList(); + Set readed = new HashSet(); + for (TousseInstance ti : tis) { + UseRecord useRecord = useRecordMap.get(ti.getId()); + if(useRecord != null && !readed.contains(useRecord.getId())){ operationRoomList.add(useRecord.getOperationRoom()); + circuitNurseList.add(useRecord.getCircuitNurse()); + readed.add(useRecord.getId()); } } - return StringTools.join(operationRoomList, ";"); + itemVo.setOperationRoom(StringTools.join(operationRoomList, ";")); + itemVo.setCircuitNurse(StringTools.join(circuitNurseList, ";")); } - return null; } @Override Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManager.java =================================================================== diff -u -r36194 -r36195 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManager.java (.../InvoicePlanManager.java) (revision 36194) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManager.java (.../InvoicePlanManager.java) (revision 36195) @@ -400,6 +400,7 @@ public RecyclingApplicationVo invoicePlan2RecyclingApplicationVo(InvoicePlan invoicePlan,boolean sort, Map specialInfectionMap); /** * 申请单转换为RecyclingApplicationVo对象 + * 此方法修改时,需注意效率 需考虑被调用的所有地方 * @param sort 申请单中的物品是否需要排序 * @param invoicePlan * @param specialInfectionMap 特殊感染类型