Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java =================================================================== diff -u -r27609 -r27616 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 27609) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 27616) @@ -585,16 +585,17 @@ * 设置申请的所有物品的状态 * @param list */ + @SuppressWarnings("unchecked") private void addApplicationGoodsVoStatus(Collection list) { if(CollectionUtils.isEmpty(list)){ return; } List invoicePlanIds = new ArrayList(); List tousseItemIds = new ArrayList(); - Map> invoicePlanIdToTousseItemsMap = new HashMap>(); - Map> invoicePlanIdToTousseInstancesMap = new HashMap>(); - // 获取invoicePlanIdToTousseInstancesMap + // 器械包名称和包实例的Map + Map> tousseNameToTousseInstancesMap = new HashMap>(); + // 获取tousseNameToTousseInstancesMap for (ApplicationGoodsVo applicationGoodsVo : list) { Map> map = applicationGoodsVo.getInvoicePlanIdToTousseItemIdListMap(); for(Map.Entry> entry : map.entrySet()){ @@ -607,12 +608,6 @@ List tousseItems = objectDao.findByIds(TousseItem.class.getSimpleName(), tousseItemIds); List tousseDefinitionIds = new ArrayList(); for (TousseItem item : tousseItems) { - List tempList = invoicePlanIdToTousseItemsMap.get(item.getInvoicePlan().getId()); - if(CollectionUtils.isEmpty(tempList)){ - tempList = new ArrayList(); - } - tempList.add(item); - invoicePlanIdToTousseItemsMap.put(item.getInvoicePlan().getId(), tempList); tousseDefinitionIds.add(item.getTousseDefinitionId()); } List tousseInstances = null; @@ -622,13 +617,15 @@ SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.invoicePlanID", invoicePlanIds), SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.tousseDefinition.id", tousseDefinitionIds)); tousseInstances = objectDao.findByHql(tousseInstanceHql); - for (TousseInstance tousseInstance : tousseInstances) { - List tempList = invoicePlanIdToTousseInstancesMap.get(tousseInstance.getInvoicePlanID()); - if(CollectionUtils.isEmpty(tempList)){ - tempList = new ArrayList(); + if(CollectionUtils.isNotEmpty(tousseInstances)){ + for (TousseInstance tousseInstance : tousseInstances) { + List tempList = tousseNameToTousseInstancesMap.get(tousseInstance.getTousseName()); + if(CollectionUtils.isEmpty(tempList)){ + tempList = new ArrayList(); + } + tempList.add(tousseInstance); + tousseNameToTousseInstancesMap.put(tousseInstance.getTousseName(), tempList); } - tempList.add(tousseInstance); - invoicePlanIdToTousseInstancesMap.put(tousseInstance.getInvoicePlanID(), tempList); } } @@ -644,29 +641,24 @@ continue; } - // 一次性物品都作为“已灭菌”状态 - if(StringUtils.equals(applicationGoodsVo.getGoodsType(), DisposableGoodsStock.TYPE_NAME)){ + // 消毒物品和一次性物品都作为“已灭菌”状态处理 + if(StringUtils.equals(applicationGoodsVo.getGoodsType(), DisposableGoodsStock.TYPE_NAME) || + StringUtils.equals(applicationGoodsVo.getGoodsType(), TousseDefinition.PACKAGE_TYPE_DISINFECTION)){ applicationGoodsVo.setStatus(ApplicationGoodsVo.STATUS_STERILED); continue; } - List invoicePlanIDs = applicationGoodsVo.getInvoicePlanIDList(); - // 根据包实例判断物品是否"已灭菌" - for (Long id : invoicePlanIDs) { - if(StringUtils.equals(applicationGoodsVo.getStatus(), ApplicationGoodsVo.STATUS_STERILED) - || StringUtils.equals(applicationGoodsVo.getStatus(), ApplicationGoodsVo.STATUS_URGENT)){ - break; - } - List tempList = invoicePlanIdToTousseInstancesMap.get(id); - if(CollectionUtils.isNotEmpty(tempList)){ - for (TousseInstance tousseInstance : tempList) { - if(StringUtils.equals(tousseInstance.getStatus(), TousseInstance.STATUS_STERILED)){ - applicationGoodsVo.setStatus(ApplicationGoodsVo.STATUS_STERILED); - break; - } + // 器械包灭菌状态判断 + List tempList = tousseNameToTousseInstancesMap.get(applicationGoodsVo.getName()); + if(CollectionUtils.isNotEmpty(tempList)){ + for (TousseInstance tousseInstance : tempList) { + if(StringUtils.equals(tousseInstance.getStatus(), TousseInstance.STATUS_STERILED)){ + applicationGoodsVo.setStatus(ApplicationGoodsVo.STATUS_STERILED); + break; } } } + } } @@ -748,9 +740,13 @@ Collections.sort(urgentList); reorderedList.addAll(urgentList); } - // 器械包按照:已灭菌的器械包→未灭菌的器械包的顺序排序(SZSDSRMYY-8) - // 一次性物品的排序要在器械包排序后边 + // 1、器械包按照:已灭菌的器械包→未灭菌的器械包的顺序排序(SZSDSRMYY-8) + // 2、一次性物品的排序要在器械包排序后边 + // 3、如果同时存在多种加急的物品,则按照物品的申请时间升序排序,申请时间越早,排序越靠前 if(sortingOfGoodsToBeShipped == 1){ + reorderedList = new ArrayList(); + urgentList = orderApplicationGoodsVoByApplicationTimeASC(urgentList); + reorderedList.addAll(urgentList); for(ApplicationGoodsVo applicationGoodsVo : tousseList){ String status = applicationGoodsVo.getStatus(); if(StringUtils.equals(status, ApplicationGoodsVo.STATUS_STERILED)){ @@ -771,6 +767,47 @@ return reorderedList; } + /** + * 按照物品的申请时间升序排序,申请时间越早,排序越靠前 + * @param urgentList + */ + @SuppressWarnings("unchecked") + private List orderApplicationGoodsVoByApplicationTimeASC( + List urgentList) { + if(CollectionUtils.isEmpty(urgentList)){ + return urgentList; + } + List applicationGoodsVoList = new ArrayList(); + List invoicePlanIds = new ArrayList(); + Map> invoicePlanToApplicationGoodsVoMap = + new HashMap>(); + for (ApplicationGoodsVo applicationGoodsVo : urgentList) { + invoicePlanIds.addAll(applicationGoodsVo.getInvoicePlanIDList()); + } + String invoicePlanHql = String.format(" from %s po where %s order by po.applicationTime asc", + InvoicePlan.class.getSimpleName(), + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.id", invoicePlanIds)); + List invoicePlans = objectDao.findByHql(invoicePlanHql); + for (InvoicePlan invoicePlan : invoicePlans) { + Long id = invoicePlan.getId(); + List voList = invoicePlanToApplicationGoodsVoMap.get(id); + if(CollectionUtils.isEmpty(voList)){ + voList = new ArrayList(); + } + for (ApplicationGoodsVo applicationGoodsVo : urgentList) { + List invoicePlanIdList = applicationGoodsVo.getInvoicePlanIDList(); + if(invoicePlanIdList.contains(id)){ + voList.add(applicationGoodsVo); + } + } + invoicePlanToApplicationGoodsVoMap.put(id, voList); + } + for (InvoicePlan invoicePlan : invoicePlans) { + applicationGoodsVoList.addAll(invoicePlanToApplicationGoodsVoMap.get(invoicePlan.getId())); + } + return applicationGoodsVoList; + } + private Collection getInvoicePlans(Collection departCodes, String applyDate, String tousseType,String disposableGoodsType,String sterilingMethods, String tousseGroupIds, boolean isSortedByUrgency){ boolean hideUnprintedDisposableGoodsInvoicePlan = CssdUtils.getSystemSetConfigByNameBool("hideUnprintedDisposableGoodsInvoicePlan"); //查询发货计划