Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java =================================================================== diff -u -r35957 -r36053 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java (.../InvoiceOptimizeManagerImpl.java) (revision 35957) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java (.../InvoiceOptimizeManagerImpl.java) (revision 36053) @@ -1755,8 +1755,20 @@ } //如果项目有开启优先发货价格的配置项且对应所发货的一次性物品或一次性物品批次有相应的默认发货价格时,根据所配置的优先发货价格对一次性物品标识数据集合进行排序 if(CollectionUtils.isNotEmpty(disposablePriorInvoicePriceList)){ - //价格的集合 + //价格的集合(暂时不用了) List priceLsit = disposablePriorInvoicePriceList.stream().map(DisposablePriorInvoicePrice::getPrice).collect(Collectors.toList()); + //批次库存id对应的优先发货价格的map(如果相同的优先发货价格有多个批次库存都设置了优先发货时以前面的为准) + Map> priorInvoiceToBatchStockIdListToPriceMap = new HashMap>(); + for(DisposablePriorInvoicePrice disposablePriorInvoicePrice : disposablePriorInvoicePriceList) { + Double priorInvoicePrice = disposablePriorInvoicePrice.getPrice(); + Long batchStockId = disposablePriorInvoicePrice.getDisposableGoodsBatchStockId(); + List batchStockIdList = priorInvoiceToBatchStockIdListToPriceMap.get(priorInvoicePrice); + if(batchStockIdList == null){ + batchStockIdList = new ArrayList(); + } + batchStockIdList.add(batchStockId); + priorInvoiceToBatchStockIdListToPriceMap.put(priorInvoicePrice, batchStockIdList); + } //对查出的标识符进行排序(将优先发货价格的标识符排在前面) identificationList.sort(new Comparator(){ @Override @@ -1765,15 +1777,19 @@ if(CollectionUtils.isNotEmpty(disposableGoodsList)){ //先按价格,再按批次的失效期 Double price1 = identification1.getPrice(); + Long batchStockId1 = identification1.getBatchStock().getId(); Double price2 = identification2.getPrice(); - if(!priceLsit.contains(price1)){ - if(!priceLsit.contains(price2)){ + Long batchStockId2 = identification2.getBatchStock().getId(); + + + if(!priorInvoiceToBatchStockIdListToPriceMap.containsKey(price1) || !priorInvoiceToBatchStockIdListToPriceMap.get(price1).contains(batchStockId1)){ + if(!priorInvoiceToBatchStockIdListToPriceMap.containsKey(price2) || !priorInvoiceToBatchStockIdListToPriceMap.get(price2).contains(batchStockId2)){ }else{ return 1; } }else{ - if(!priceLsit.contains(price2)){ + if(!priorInvoiceToBatchStockIdListToPriceMap.containsKey(price2) || !priorInvoiceToBatchStockIdListToPriceMap.get(price2).contains(batchStockId2)){ return -1; }else{