Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java =================================================================== diff -u -r27616 -r27619 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 27616) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 27619) @@ -7,6 +7,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.HashSet; @@ -641,9 +642,8 @@ continue; } - // 消毒物品和一次性物品都作为“已灭菌”状态处理 - if(StringUtils.equals(applicationGoodsVo.getGoodsType(), DisposableGoodsStock.TYPE_NAME) || - StringUtils.equals(applicationGoodsVo.getGoodsType(), TousseDefinition.PACKAGE_TYPE_DISINFECTION)){ + // 一次性物品都作为“已灭菌”状态处理 + if(StringUtils.equals(applicationGoodsVo.getGoodsType(), DisposableGoodsStock.TYPE_NAME)){ applicationGoodsVo.setStatus(ApplicationGoodsVo.STATUS_STERILED); continue; } @@ -656,9 +656,14 @@ applicationGoodsVo.setStatus(ApplicationGoodsVo.STATUS_STERILED); break; } + // “已消毒”状态的消毒物品不需要再进行灭菌,作为“已灭菌”状态处理 + if(StringUtils.equals(applicationGoodsVo.getGoodsType(), TousseDefinition.PACKAGE_TYPE_DISINFECTION) + && StringUtils.equals(tousseInstance.getStatus(), TousseInstance.STATUS_DISINFECTED)){ + applicationGoodsVo.setStatus(ApplicationGoodsVo.STATUS_STERILED); + break; + } } } - } } @@ -711,8 +716,6 @@ List disposableGoodList = new ArrayList<>(list.size()); // 器械包的list List tousseList = new ArrayList<>(list.size()); - List steriledTousseList = new ArrayList<>(list.size()); - List unsteriledTousseList = new ArrayList<>(list.size()); // 消毒物品的list List disinfectionList = new ArrayList<>(list.size()); //加急物品的list @@ -740,25 +743,20 @@ Collections.sort(urgentList); reorderedList.addAll(urgentList); } - // 1、器械包按照:已灭菌的器械包→未灭菌的器械包的顺序排序(SZSDSRMYY-8) - // 2、一次性物品的排序要在器械包排序后边 - // 3、如果同时存在多种加急的物品,则按照物品的申请时间升序排序,申请时间越早,排序越靠前 + if(sortingOfGoodsToBeShipped == 1){ - reorderedList = new ArrayList(); + // 深圳市第三人民医院SZSDSRMYY-8 待发货物品颜色状态显示 + // 1、器械包按照:已灭菌的器械包→未灭菌的器械包的顺序排序(SZSDSRMYY-8) + // 2、如果已灭菌和未灭菌的器械包中有器械包,外来器械包,消毒物品,外部代理灭菌包,排序顺序为:器械包-外来器械包-消毒物品-外部代理灭菌包 + // 3、如果同时存在多种加急的物品,则按照物品的申请时间升序排序,申请时间越早,排序越靠前 + // 4、一次性物品的排序要在器械包排序后边 urgentList = orderApplicationGoodsVoByApplicationTimeASC(urgentList); + tousseList.addAll(disinfectionList); + List tousseVoList = orderApplicationGoodsVo(tousseList); + reorderedList = new ArrayList(); reorderedList.addAll(urgentList); - for(ApplicationGoodsVo applicationGoodsVo : tousseList){ - String status = applicationGoodsVo.getStatus(); - if(StringUtils.equals(status, ApplicationGoodsVo.STATUS_STERILED)){ - steriledTousseList.add(applicationGoodsVo); - continue; - } - unsteriledTousseList.add(applicationGoodsVo); - } - reorderedList.addAll(steriledTousseList); - reorderedList.addAll(unsteriledTousseList); + reorderedList.addAll(tousseVoList); reorderedList.addAll(disposableGoodList); - reorderedList.addAll(disinfectionList); } else { reorderedList.addAll(disposableGoodList); reorderedList.addAll(tousseList); @@ -768,8 +766,83 @@ } /** + * 如果已灭菌和未灭菌的器械包中有器械包,外来器械包,消毒物品,外部代理灭菌包,排序顺序为:器械包-外来器械包-消毒物品-外部代理灭菌包 + * @param tousseList + * @return + */ + private List orderApplicationGoodsVo( List tousseList){ + List reorderedList = new ArrayList(); + // 已灭菌物品 + List steriledTousseList = new ArrayList<>(tousseList.size()); + // 未灭菌物品 + List unsteriledTousseList = new ArrayList<>(tousseList.size()); + + for(ApplicationGoodsVo applicationGoodsVo : tousseList){ + String status = applicationGoodsVo.getStatus(); + if(StringUtils.equals(status, ApplicationGoodsVo.STATUS_STERILED)){ + steriledTousseList.add(applicationGoodsVo); + continue; + } + unsteriledTousseList.add(applicationGoodsVo); + } + // 排序顺序为:器械包-外来器械包-消毒物品-外部代理灭菌包 + if(CollectionUtils.isNotEmpty(steriledTousseList)){ + List tousseVoList = new ArrayList<>(tousseList.size()); + List foreignTousseVoList = new ArrayList<>(tousseList.size()); + List disinfectioVoList = new ArrayList<>(tousseList.size()); + List foreignProxyTousseVoList = new ArrayList<>(tousseList.size()); + for (ApplicationGoodsVo vo : steriledTousseList) { + if(StringUtils.equals(vo.getGoodsType(), TousseDefinition.PACKAGE_TYPE_FOREIGN)){ + foreignTousseVoList.add(vo); + continue; + } + if(StringUtils.equals(vo.getGoodsType(), TousseDefinition.PACKAGE_TYPE_DISINFECTION)){ + disinfectioVoList.add(vo); + continue; + } + if(StringUtils.equals(vo.getGoodsType(), TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY)){ + foreignProxyTousseVoList.add(vo); + continue; + } + tousseVoList.add(vo); + } + reorderedList.addAll(tousseVoList); + reorderedList.addAll(foreignTousseVoList); + reorderedList.addAll(disinfectioVoList); + reorderedList.addAll(foreignProxyTousseVoList); + } + // 排序顺序为:器械包-外来器械包-消毒物品-外部代理灭菌包 + if(CollectionUtils.isNotEmpty(unsteriledTousseList)){ + List tousseVoList = new ArrayList<>(tousseList.size()); + List foreignTousseVoList = new ArrayList<>(tousseList.size()); + List disinfectioVoList = new ArrayList<>(tousseList.size()); + List foreignProxyTousseVoList = new ArrayList<>(tousseList.size()); + for (ApplicationGoodsVo vo : unsteriledTousseList) { + if(StringUtils.equals(vo.getGoodsType(), TousseDefinition.PACKAGE_TYPE_FOREIGN)){ + foreignTousseVoList.add(vo); + continue; + } + if(StringUtils.equals(vo.getGoodsType(), TousseDefinition.PACKAGE_TYPE_DISINFECTION)){ + disinfectioVoList.add(vo); + continue; + } + if(StringUtils.equals(vo.getGoodsType(), TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY)){ + foreignProxyTousseVoList.add(vo); + continue; + } + tousseVoList.add(vo); + } + reorderedList.addAll(tousseVoList); + reorderedList.addAll(foreignTousseVoList); + reorderedList.addAll(disinfectioVoList); + reorderedList.addAll(foreignProxyTousseVoList); + } + return reorderedList; + } + + /** * 按照物品的申请时间升序排序,申请时间越早,排序越靠前 - * @param urgentList + * @param urgentList 加急物品 */ @SuppressWarnings("unchecked") private List orderApplicationGoodsVoByApplicationTimeASC( @@ -779,32 +852,42 @@ } 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); + // 按照物品的申请时间升序排序 + if(CollectionUtils.isNotEmpty(invoicePlans)){ + for (InvoicePlan invoicePlan : invoicePlans) { + Long id = invoicePlan.getId(); + for (ApplicationGoodsVo applicationGoodsVo : urgentList) { + List invoicePlanIdList = applicationGoodsVo.getInvoicePlanIDList(); + if(CollectionUtils.isNotEmpty(invoicePlanIdList)){ + if(invoicePlanIdList.contains(id) && !applicationGoodsVoList.contains(applicationGoodsVo)){ + applicationGoodsVoList.add(applicationGoodsVo); + } + } } } - invoicePlanToApplicationGoodsVoMap.put(id, voList); } - for (InvoicePlan invoicePlan : invoicePlans) { - applicationGoodsVoList.addAll(invoicePlanToApplicationGoodsVoMap.get(invoicePlan.getId())); - } + // 加急物品根据排序的等级排序,等级越高越优先 + applicationGoodsVoList.sort(new Comparator() { + @Override + public int compare(ApplicationGoodsVo o1, ApplicationGoodsVo o2) { + UrgentLevel urgentLevel1 = o1.getMaxUrgentLevel(); + UrgentLevel urgentLevel2 = o2.getMaxUrgentLevel(); + if(urgentLevel1 == null){ + return 1; + } + if(urgentLevel2 == null){ + return -1; + } + return urgentLevel2.getGrade().compareTo(urgentLevel1.getGrade()); + } + }); return applicationGoodsVoList; }