Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java =================================================================== diff -u -r27534 -r27609 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 27534) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 27609) @@ -577,10 +577,100 @@ String sql = "update invoicePlan set readed = " + InvoicePlan.READED + " where id in (" + idsStr + ")"; objectDao.excuteSQL(sql); } - + addApplicationGoodsVoStatus(datas.values()); return reorderApplicationGoodsVo(datas.values()); } + /** + * 设置申请的所有物品的状态 + * @param list + */ + 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 + for (ApplicationGoodsVo applicationGoodsVo : list) { + Map> map = applicationGoodsVo.getInvoicePlanIdToTousseItemIdListMap(); + for(Map.Entry> entry : map.entrySet()){ + String invoiceId = entry.getKey(); + List tousseItemIdList = entry.getValue(); + tousseItemIds.addAll(tousseItemIdList); + invoicePlanIds.add(invoiceId); + } + } + 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; + if(CollectionUtils.isNotEmpty(tousseDefinitionIds)){ + String tousseInstanceHql = String.format(" from %s po where %s and %s ", + TousseInstance.class.getSimpleName(), + 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(); + } + tempList.add(tousseInstance); + invoicePlanIdToTousseInstancesMap.put(tousseInstance.getInvoicePlanID(), tempList); + } + } + + // 判断物品状态 + for (ApplicationGoodsVo applicationGoodsVo : list) { + // 默认状态为“未灭菌” + applicationGoodsVo.setStatus(ApplicationGoodsVo.STATUS_UNSTERILED); + + // 加急状态判断 + boolean enableUrgentFunction = CssdUtils.getSystemSetConfigByNameBool("enableUrgentFunction",false); + if(enableUrgentFunction && applicationGoodsVo.getMaxUrgentLevel() != null){ + applicationGoodsVo.setStatus(ApplicationGoodsVo.STATUS_URGENT); + continue; + } + + // 一次性物品都作为“已灭菌”状态 + if(StringUtils.equals(applicationGoodsVo.getGoodsType(), DisposableGoodsStock.TYPE_NAME)){ + 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; + } + } + } + } + } + + } + /** * 获取申请单集合的申请物品包定义map<器械包定义id,器械包定义> * @param invoicePlans 申请单集合 * @param queryDisposableGoods 是否按器械包分组过滤 @@ -629,11 +719,14 @@ 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 List urgentList = new ArrayList<>(list.size()); boolean enableUrgentFunction = CssdUtils.getSystemSetConfigByNameBool("enableUrgentFunction",false); + int sortingOfGoodsToBeShipped = CssdUtils.getSystemSetConfigByNameInt("sortingOfGoodsToBeShipped",0); for (ApplicationGoodsVo applicationGoodsVo : list) { String goodsType = applicationGoodsVo.getGoodsType(); if(enableUrgentFunction && applicationGoodsVo.getMaxUrgentLevel() != null){ @@ -655,9 +748,26 @@ Collections.sort(urgentList); reorderedList.addAll(urgentList); } - reorderedList.addAll(disposableGoodList); - reorderedList.addAll(tousseList); - reorderedList.addAll(disinfectionList); + // 器械包按照:已灭菌的器械包→未灭菌的器械包的顺序排序(SZSDSRMYY-8) + // 一次性物品的排序要在器械包排序后边 + if(sortingOfGoodsToBeShipped == 1){ + 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(disposableGoodList); + reorderedList.addAll(disinfectionList); + } else { + reorderedList.addAll(disposableGoodList); + reorderedList.addAll(tousseList); + reorderedList.addAll(disinfectionList); + } return reorderedList; } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/vo/ApplicationGoodsVo.java =================================================================== diff -u -r26368 -r27609 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/vo/ApplicationGoodsVo.java (.../ApplicationGoodsVo.java) (revision 26368) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/vo/ApplicationGoodsVo.java (.../ApplicationGoodsVo.java) (revision 27609) @@ -46,6 +46,26 @@ private boolean beforeToday; // 是否包含今天以前申请的物品 private int materialAmount; // 材料总数量 + + /** + * 器械包存在加急、已灭菌、未灭菌三种状态(SZSDSRMYY-8) + */ + private String status; + + /** + * 加急状态 + */ + public final static String STATUS_URGENT = "加急"; + + /** + * 已灭菌状态 + */ + public static final String STATUS_STERILED = "已灭菌"; + + /** + * 未灭菌状态 + */ + public final static String STATUS_UNSTERILED = "未灭菌"; /** * 一次性物品定义的Id @@ -287,6 +307,14 @@ this.maxUrgentLevel = maxUrgentLevel; } + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + /** * 紧急程度grade最高的排前面 */