Subversion Repositories SmartDukaan

Rev

Rev 32043 | Rev 32070 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 32043 Rev 32064
Line 622... Line 622...
622
        return rollout;
622
        return rollout;
623
    }
623
    }
624
 
624
 
625
    @Override
625
    @Override
626
    public void processActivationtOffer(CreateOfferRequest createOfferRequest) throws ProfitMandiBusinessException {
626
    public void processActivationtOffer(CreateOfferRequest createOfferRequest) throws ProfitMandiBusinessException {
627
        //List<OfferRowModel> offerRowModels = new ArrayList<>();
-
 
628
        List<OfferPayout> offerPayouts = offerPayoutRepository.selectAllByOfferId(createOfferRequest.getId());
627
        List<OfferPayout> offerPayouts = offerPayoutRepository.selectAllByOfferId(createOfferRequest.getId());
629
        List<ItemCriteriaPayout> itemCriteriaPayouts = createOfferRequest.getTargetSlabs().get(0).getItemCriteriaPayouts();
628
        List<ItemCriteriaPayout> itemCriteriaPayouts = createOfferRequest.getTargetSlabs().get(0).getItemCriteriaPayouts();
630
        Map<Integer, ItemCriteriaPayout> itemCriteriaPayoutMap = itemCriteriaPayouts.stream().collect(Collectors.toMap(x -> x.getItemCriteria().getId(), x -> x));
629
        Map<Integer, ItemCriteriaPayout> itemCriteriaPayoutMap = itemCriteriaPayouts.stream().collect(Collectors.toMap(x -> x.getItemCriteria().getId(), x -> x));
631
        LOGGER.info("itemCriteriaPayoutMap {}", itemCriteriaPayoutMap);
630
        LOGGER.info("itemCriteriaPayoutMap {}", itemCriteriaPayoutMap);
632
        LOGGER.info("offerPayouts {}", offerPayouts);
631
        LOGGER.info("offerPayouts {}", offerPayouts);
633
        Map<Integer, Map<Integer, Double>> fixedSlabCriteriaPartnerMap = offerPayouts.stream().filter(x -> itemCriteriaPayoutMap.get((int) x.getCriteriaId()).getAmountType().equals(AmountType.SLAB_FIXED))
632
        Map<Integer, Map<Integer, Double>> fixedSlabCriteriaPartnerMap = offerPayouts.stream().filter(x -> itemCriteriaPayoutMap.get((int) x.getCriteriaId()).getAmountType().equals(AmountType.SLAB_FIXED))
634
                .collect(Collectors.groupingBy(x -> (int) x.getCriteriaId(), Collectors.groupingBy(x -> (int) x.getFofoId(), Collectors.summingDouble(x -> x.getSlabAmount()))));
633
                .collect(Collectors.groupingBy(x -> (int) x.getCriteriaId(), Collectors.groupingBy(x -> (int) x.getFofoId(), Collectors.summingDouble(x -> x.getSlabAmount()))));
635
 
634
 
636
 
635
 
637
        Map<String, Double> serialNumberPaid = offerPayouts.stream().filter(x -> x.getRejectTimestamp() == null).collect(Collectors.groupingBy(x -> x.getSerialNumber(), Collectors.summingDouble(x -> x.getSlabAmount())));
636
        Map<String, Double> serialNumberPaid = offerPayouts.stream().filter(x -> x.getRejectTimestamp() == null).collect(Collectors.groupingBy(x -> x.getSerialNumber(), Collectors.summingDouble(x -> x.getSlabAmount())));
638
        /*if (offerPayouts.size() > 0) {
-
 
639
            throw new ProfitMandiBusinessException("Offer Already Processed", "Offer Already Processed", "Offer Already Processed");
-
 
640
        }*/
-
 
641
        Map<Integer, Map<Integer, List<FofoOrderItem>>> criteriaPartnerwiseTertiary = offerRepository.getCriteriaWisePartnerTertiary(createOfferRequest);
637
        Map<Integer, Map<Integer, List<FofoOrderItem>>> criteriaPartnerwiseTertiary = offerRepository.getCriteriaWisePartnerTertiary(createOfferRequest);
642
 
638
 
643
 
639
 
644
        final Set<String> activatedImeis;
640
        final Set<String> activatedImeis;
645
        final Set<String> missingImeis;
-
 
646
        if (createOfferRequest.getSchemeType().equals(OfferSchemeType.ACTIVATION)) {
641
        if (createOfferRequest.getSchemeType().equals(OfferSchemeType.ACTIVATION)) {
647
            //All Serialnumbers for all eligible retailers
642
            //All Serialnumbers for all eligible retailers
648
            List<String> serialNumbers = criteriaPartnerwiseTertiary.entrySet().stream().flatMap(x -> x.getValue().entrySet().stream().flatMap(foiList -> foiList.getValue().stream()))
643
            List<String> serialNumbers = criteriaPartnerwiseTertiary.entrySet().stream().flatMap(x -> x.getValue().entrySet().stream().flatMap(foiList -> foiList.getValue().stream()))
649
                    .flatMap(y -> y.getFofoLineItems().stream()).filter(fli -> fli.getSerialNumber() != null)
644
                    .flatMap(y -> y.getFofoLineItems().stream()).filter(fli -> fli.getSerialNumber() != null)
650
                    .map(x -> x.getSerialNumber()).collect(Collectors.toList());
645
                    .map(x -> x.getSerialNumber()).collect(Collectors.toList());
651
            if (serialNumbers.size() > 0) {
646
            if (serialNumbers.size() > 0) {
652
                activatedImeis = activatedImeiRepository.selectBySerialNumbers(serialNumbers).stream()
647
                activatedImeis = activatedImeiRepository.selectBySerialNumbers(serialNumbers).stream()
653
                        .filter(x -> createOfferRequest.isWithinRange(x.getActivationTimestamp()))
648
                        .filter(x -> createOfferRequest.isWithinRange(x.getActivationTimestamp()))
654
                        .map(x -> x.getSerialNumber()).collect(Collectors.toSet());
649
                        .map(x -> x.getSerialNumber()).collect(Collectors.toSet());
655
                //missingImeis = serialNumbers.stream().filter(x -> !activatedImeis.contains(x)).collect(Collectors.toSet());
-
 
656
                //activatedImeis.addAll(missingImeis);
-
 
657
                //serialNumbers.removeAll(activatedImeis);
-
 
658
            } else {
650
            } else {
659
                activatedImeis = null;
651
                activatedImeis = null;
660
            }
652
            }
661
            // TODO Amit
-
 
662
            /**
-
 
663
             * Missing imeis are considered as activated as long as payout calculations are
-
 
664
             * concerned - Add flag if calculations are meant for final payout(Wherein
-
 
665
             * missing imeis are no longer considered to be activated)
-
 
666
             **/
-
 
667
        } else {
653
        } else {
668
            activatedImeis = null;
654
            activatedImeis = null;
669
        }
655
        }
670
 
656
 
671
        Map<Integer, Integer> userBaseQtyMap = new HashMap<>();
657
        Map<Integer, Integer> userBaseQtyMap = new HashMap<>();
Line 701... Line 687...
701
 
687
 
702
                }
688
                }
703
 
689
 
704
            }
690
            }
705
        }
691
        }
706
        //Map<Integer, Double> totalPurchaseValueMap = null;
-
 
707
        if (createOfferRequest.getSellinPercentage() > 0) {
-
 
708
			/*List<Order> purchaseOrders = orderRepository.selectOrdersBetweenDates(fofoIds, "billingTimestamp",
-
 
709
					createOfferRequest.getStartDate(), createOfferRequest.getEndDate());
-
 
710
			Map<Integer, Double> totalPurchaseValueMap = purchaseOrders.stream().collect(
-
 
711
					Collectors.groupingBy(x -> x.getRetailerId(), Collectors.summingDouble(x -> x.getWalletAmount())));*/
-
 
712
        }
-
 
713
 
-
 
714
 
692
 
715
        //As of now eligible sale is considered to be without special criteria like brand/
693
        //As of now eligible sale is considered to be without special criteria like brand/
716
        for (ItemCriteriaPayout itemCriteriaPayout : createOfferRequest.getTargetSlabs().get(0).getItemCriteriaPayouts()) {
694
        for (ItemCriteriaPayout itemCriteriaPayout : createOfferRequest.getTargetSlabs().get(0).getItemCriteriaPayouts()) {
717
            int criteriaId = itemCriteriaPayout.getItemCriteria().getId();
695
            int criteriaId = itemCriteriaPayout.getItemCriteria().getId();
718
            Map<Integer, List<FofoOrderItem>> ordersMap = criteriaPartnerwiseTertiary.get(criteriaId);
696
            Map<Integer, List<FofoOrderItem>> ordersMap = criteriaPartnerwiseTertiary.get(criteriaId);
Line 838... Line 816...
838
        }
816
        }
839
        Offer offer = offerRepository.selectById(createOfferRequest.getId());
817
        Offer offer = offerRepository.selectById(createOfferRequest.getId());
840
        offer.setProcessedTimestamp(LocalDateTime.now());
818
        offer.setProcessedTimestamp(LocalDateTime.now());
841
    }
819
    }
842
 
820
 
-
 
821
    private void extracted(CreateOfferRequest createOfferRequest, Map<String, Double> serialNumberPaid, ItemCriteriaPayout itemCriteriaPayout, int criteriaId, double totalRolloutAmount, int fofoId, Map<FofoLineItem, Integer> lineItemValueMap, float eligiblePayoutValue) throws ProfitMandiBusinessException {
-
 
822
        List<Integer> inventoryItemIds = lineItemValueMap.keySet().stream().map(x -> x.getInventoryItemId()).collect(Collectors.toList());
-
 
823
        Map<Integer, InventoryItem> inventoryItemsMap = inventoryItemRepository.selectAllByIds(inventoryItemIds).stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
-
 
824
        for (Map.Entry<FofoLineItem, Integer> lineItemValueEntry : lineItemValueMap.entrySet()) {
-
 
825
            double amount = 0;
-
 
826
            int totalDpValue = lineItemValueMap.values().stream().collect(Collectors.summingInt(x -> x));
-
 
827
            LOGGER.info("Total DP Value {}", totalDpValue);
-
 
828
            if (AmountType.SLAB_FIXED.equals(itemCriteriaPayout.getAmountType())) {
-
 
829
                amount = (eligiblePayoutValue * lineItemValueEntry.getValue()) / totalDpValue;
-
 
830
                LOGGER.info("Amount - {}", amount);
-
 
831
                //Fixed slab should be treated as fixed after payout
-
 
832
            } else {
-
 
833
                amount = eligiblePayoutValue;
-
 
834
                //Fixed slab has already taken care of that amount;
-
 
835
                if (serialNumberPaid.containsKey(lineItemValueEntry.getKey().getSerialNumber())) {
-
 
836
                    amount = amount - serialNumberPaid.get(lineItemValueEntry.getKey().getSerialNumber());
-
 
837
                }
-
 
838
            }
-
 
839
            LOGGER.info("Amount - {}", amount);
-
 
840
            //ignore reasonably small
-
 
841
            if (amount < Utils.DOUBLE_EPSILON) continue;
-
 
842
            AmountModel amountModel = new AmountModel();
-
 
843
            amountModel.setAmountType(itemCriteriaPayout.getAmountType());
-
 
844
            amountModel.setAmount(amount);
-
 
845
            amountModel.setDiscount(createOfferRequest.isDiscount());
-
 
846
            InventoryPayoutModel inventoryPayoutModel = priceCircularService.getPayouts(inventoryItemsMap.get(lineItemValueEntry.getKey().getInventoryItemId()));
-
 
847
            double rolloutAmount = inventoryPayoutModel.getRolloutAmount(amountModel);
-
 
848
            totalRolloutAmount += rolloutAmount;
-
 
849
 
-
 
850
            OfferPayout offerPayout = new OfferPayout(fofoId, createOfferRequest.getId(), criteriaId, amount, lineItemValueEntry.getKey().getSerialNumber(), rolloutAmount, SchemePayoutStatus.CREDITED, createOfferRequest.getDescription(), LocalDateTime.now());
-
 
851
            //offerPayout.setInventoryItemId(inventoryItemSaleModelsMap.get(lineItemValueEntry.getKey().getInventoryItemId()));
-
 
852
            offerPayoutRepository.persist(offerPayout);
-
 
853
        }
-
 
854
        walletService.addAmountToWallet((int) fofoId, createOfferRequest.getId(), WalletReferenceType.ADDITIONAL_SCHEME, createOfferRequest.getDescription(), (float) totalRolloutAmount, LocalDateTime.now());
-
 
855
    }
-
 
856
 
843
    @Override
857
    @Override
844
    public void processSellin(CreateOfferRequest createOfferRequest) throws Exception {
858
    public void processSellin(CreateOfferRequest createOfferRequest) throws Exception {
845
 
859
 
846
        //List<OfferRowModel> offerRowModels = new ArrayList<>();
860
        //List<OfferRowModel> offerRowModels = new ArrayList<>();
847
        List<OfferPayout> offerPayouts = offerPayoutRepository.selectAllByOfferId(createOfferRequest.getId());
861
        List<OfferPayout> offerPayouts = offerPayoutRepository.selectAllByOfferId(createOfferRequest.getId());
Line 876... Line 890...
876
 
890
 
877
        LOGGER.info("Processing sellin");
891
        LOGGER.info("Processing sellin");
878
        List<OfferPayout> offerPayoutsNew = new ArrayList<>();
892
        List<OfferPayout> offerPayoutsNew = new ArrayList<>();
879
        for (ItemCriteriaPayout itemCriteriaPayout : createOfferRequest.getTargetSlabs().get(0).getItemCriteriaPayouts()) {
893
        for (ItemCriteriaPayout itemCriteriaPayout : createOfferRequest.getTargetSlabs().get(0).getItemCriteriaPayouts()) {
880
            int criteriaId = itemCriteriaPayout.getItemCriteria().getId();
894
            int criteriaId = itemCriteriaPayout.getItemCriteria().getId();
881
            LOGGER.info("Criteria Id - {}", criteriaId);
-
 
882
            Map<Integer, List<Order>> ordersMap = criteriaOrdersMap.get(criteriaId).entrySet().stream()
895
            Map<Integer, List<Order>> ordersMap = criteriaOrdersMap.get(criteriaId).entrySet().stream()
883
                    .filter(x -> !fofoIds.contains(x.getKey())).collect(Collectors.toMap(x -> x.getKey(), x -> x.getValue()));
896
                    .filter(x -> !fofoIds.contains(x.getKey())).collect(Collectors.toMap(x -> x.getKey(), x -> x.getValue()));
884
            for (Map.Entry<Integer, List<Order>> orderEntry : ordersMap.entrySet()) {
897
            for (Map.Entry<Integer, List<Order>> orderEntry : ordersMap.entrySet()) {
885
                int fofoId = orderEntry.getKey();
898
                int fofoId = orderEntry.getKey();
886
                //CustomRetailer retailer = retailerService.getAllFofoRetailers().get(fofoId);
899
                //CustomRetailer retailer = retailerService.getAllFofoRetailers().get(fofoId);
887
                List<Order> orders = orderEntry.getValue();
900
                List<Order> orders = orderEntry.getValue();
888
                Set<String> returnedSerialNumbers = orders.stream().filter(x -> x.getSerialNumber() != null).flatMap(x -> x.getReturnedImeis().stream()).collect(Collectors.toSet());
901
                Set<String> returnedSerialNumbers = orders.stream().filter(x -> x.getSerialNumber() != null).flatMap(x -> x.getReturnedImeis().stream()).collect(Collectors.toSet());
889
                int totalQty = orders.stream().collect(Collectors.summingInt(x -> (x.getLineItem().getQuantity() - x.getLineItem().getReturnQty())));
902
                int totalQty = orders.stream().collect(Collectors.summingInt(x -> (x.getLineItem().getQuantity() - x.getLineItem().getReturnQty())));
890
                LOGGER.info("LineItems = {}", orders.stream().map(x -> x.getLineItem().getId()).collect(Collectors.toList()));
-
 
891
                int totalValue = orders.stream().collect(Collectors.summingInt(x -> Math.round(x.getLineItem().
903
                int totalValue = orders.stream().collect(Collectors.summingInt(x -> Math.round(x.getLineItem().
892
                        getUnitPrice() * (x.getLineItem().getQuantity() - x.getLineItem().getReturnQty()))));
904
                        getUnitPrice() * (x.getLineItem().getQuantity() - x.getLineItem().getReturnQty()))));
893
                int totalBaseQty = totalQty;
905
                int totalBaseQty = totalQty;
894
                int totalBaseValue = totalValue;
906
                int totalBaseValue = totalValue;
895
                if (userBaseCriteriaOrdersMap != null) {
907
                if (userBaseCriteriaOrdersMap != null) {
Line 908... Line 920...
908
                    purchasedValue = totalBaseQty;
920
                    purchasedValue = totalBaseQty;
909
                }
921
                }
910
                PayoutSlab currentSlab = itemCriteriaPayout.getPayoutSlabs().stream()
922
                PayoutSlab currentSlab = itemCriteriaPayout.getPayoutSlabs().stream()
911
                        .filter(x -> x.getOnwardsAmount() <= purchasedValue).max(Comparator.comparing(x
923
                        .filter(x -> x.getOnwardsAmount() <= purchasedValue).max(Comparator.comparing(x
912
                                -> x.getOnwardsAmount())).orElse(null);
924
                                -> x.getOnwardsAmount())).orElse(null);
913
                int targetAchieved = currentSlab ==
-
 
914
                        null ? 0 : currentSlab.getOnwardsAmount();
-
 
915
 
925
 
916
                //TODO-- payouts handling is here
926
                //TODO-- payouts handling is here
917
                if (currentSlab == null) continue;
927
                if (currentSlab == null) continue;
918
                //Need to remove hardcoding on tax
928
                //Need to remove hardcoding on tax
919
                List<Integer> orderIds = orders.stream().map(x -> x.getId()).collect(Collectors.toList());
929
                List<Integer> orderIds = orders.stream().map(x -> x.getId()).collect(Collectors.toList());
Line 936... Line 946...
936
                Map<String, LineItem> serialNumberMap = lineItemImeisRepository.selectByLineItemIds(new ArrayList<>(lineItemMap.keySet()))
946
                Map<String, LineItem> serialNumberMap = lineItemImeisRepository.selectByLineItemIds(new ArrayList<>(lineItemMap.keySet()))
937
                        .stream().collect(Collectors.toMap(x -> x.getSerialNumber(), x -> lineItemMap.get(x.getLineItemId()), (x1, x2) -> x1.getId() > x2.getId() ? x1 : x2));
947
                        .stream().collect(Collectors.toMap(x -> x.getSerialNumber(), x -> lineItemMap.get(x.getLineItemId()), (x1, x2) -> x1.getId() > x2.getId() ? x1 : x2));
938
 
948
 
939
                serialNumberMap = serialNumberMap.entrySet().stream().filter(x -> serialNumbers.contains(x.getKey())).collect(Collectors.toMap(x -> x.getKey(), x -> x.getValue()));
949
                serialNumberMap = serialNumberMap.entrySet().stream().filter(x -> serialNumbers.contains(x.getKey())).collect(Collectors.toMap(x -> x.getKey(), x -> x.getValue()));
940
 
950
 
-
 
951
                Map<String, InventoryItem> serialNumberInventoryItemMap = this.getInventoryItemMap(fofoId, serialNumberMap);
-
 
952
                //Continue if all imeis havent been grned
-
 
953
                if(serialNumberInventoryItemMap.size() < serialNumberCountMap.size()) continue;
-
 
954
 
941
                LOGGER.info("serialNumberMap {}", serialNumberMap);
955
                LOGGER.info("serialNumberMap {}", serialNumberMap);
942
                double amount = 0;
956
                double amount = 0;
943
                int lineItemsValue = serialNumberMap.values().stream().collect(Collectors.summingInt(x -> x.getUnitPrice().intValue()));
957
                int lineItemsValue = serialNumberMap.values().stream().collect(Collectors.summingInt(x -> x.getUnitPrice().intValue()));
944
                LOGGER.info("lineItemsValue - {}, totalValue - {}", lineItemsValue, totalValue);
958
                LOGGER.info("lineItemsValue - {}, totalValue - {}", lineItemsValue, totalValue);
945
                for (Map.Entry<String, LineItem> entry : serialNumberMap.entrySet()) {
959
                for (Map.Entry<String, LineItem> entry : serialNumberMap.entrySet()) {
Line 954... Line 968...
954
                        LOGGER.info("Serial no - {}, unitPrice - {}, amount - {}", entry.getKey(), lineItem.getUnitPrice(), amount);
968
                        LOGGER.info("Serial no - {}, unitPrice - {}, amount - {}", entry.getKey(), lineItem.getUnitPrice(), amount);
955
                    } else {
969
                    } else {
956
                        //per unit amount
970
                        //per unit amount
957
                        amount = currentSlab.getPayoutAmount();
971
                        amount = currentSlab.getPayoutAmount();
958
                    }
972
                    }
-
 
973
                    AmountModel amountModel = new AmountModel();
-
 
974
                    amountModel.setAmountType(itemCriteriaPayout.getAmountType());
-
 
975
                    amountModel.setAmount(amount);
-
 
976
                    amountModel.setDiscount(createOfferRequest.isDiscount());
-
 
977
                    InventoryPayoutModel inventoryPayoutModel = priceCircularService.getPayouts(serialNumberInventoryItemMap.get(entry.getKey()));
-
 
978
                    double rolloutAmount = inventoryPayoutModel.getRolloutAmount(amountModel);
959
                    if (fofoIds.contains(Long.valueOf(fofoId))) continue;
979
                    if (fofoIds.contains(Long.valueOf(fofoId))) continue;
960
                    OfferPayout offerPayout = new OfferPayout(fofoId, createOfferRequest.getId(), criteriaId, currentSlab.getPayoutAmount(), entry.getKey(), amount, SchemePayoutStatus.CREDITED, createOfferRequest.getDescription(), LocalDateTime.now());
980
                    OfferPayout offerPayout = new OfferPayout(fofoId, createOfferRequest.getId(), criteriaId, currentSlab.getPayoutAmount(), entry.getKey(), rolloutAmount, SchemePayoutStatus.CREDITED, createOfferRequest.getDescription(), LocalDateTime.now());
961
                    //offerPayout.setLineItemId();
981
                    //offerPayout.setLineItemId();
962
                    offerPayoutRepository.persist(offerPayout);
982
                    offerPayoutRepository.persist(offerPayout);
963
                    offerPayoutsNew.add(offerPayout);
983
                    offerPayoutsNew.add(offerPayout);
964
                }
984
                }
965
 
-
 
966
            }
985
            }
967
        }
986
        }
968
        Map<Long, Double> offerPayoutMap = offerPayoutsNew.stream().collect(Collectors.groupingBy(x -> x.getFofoId(), Collectors.summingDouble(x -> x.getAmount())));
987
        Map<Long, Double> offerPayoutMap = offerPayoutsNew.stream().collect(Collectors.groupingBy(x -> x.getFofoId(), Collectors.summingDouble(x -> x.getAmount())));
969
        for (Map.Entry<Long, Double> offerPayoutEntry : offerPayoutMap.entrySet()) {
988
        for (Map.Entry<Long, Double> offerPayoutEntry : offerPayoutMap.entrySet()) {
970
            long fofoId = offerPayoutEntry.getKey();
989
            long fofoId = offerPayoutEntry.getKey();
Line 972... Line 991...
972
            walletService.addAmountToWallet((int) fofoId, createOfferRequest.getId(), WalletReferenceType.ADDITIONAL_SCHEME, createOfferRequest.getDescription(), (float) amountToCredit, LocalDateTime.now());
991
            walletService.addAmountToWallet((int) fofoId, createOfferRequest.getId(), WalletReferenceType.ADDITIONAL_SCHEME, createOfferRequest.getDescription(), (float) amountToCredit, LocalDateTime.now());
973
        }
992
        }
974
        Offer offer = offerRepository.selectById(createOfferRequest.getId());
993
        Offer offer = offerRepository.selectById(createOfferRequest.getId());
975
        offer.setProcessedTimestamp(LocalDateTime.now());
994
        offer.setProcessedTimestamp(LocalDateTime.now());
976
    }
995
    }
-
 
996
 
-
 
997
    private Map<String, InventoryItem> getInventoryItemMap(int fofoId, Map<String, LineItem> serialNumberMap) {
-
 
998
        List<InventoryItem> inventoryItems = inventoryItemRepository.selectBySerialNumbers(serialNumberMap.keySet());
-
 
999
        inventoryItems = inventoryItems.stream().filter(x->x.getFofoId()== fofoId).collect(Collectors.toList());
-
 
1000
        Map<String,InventoryItem> inventoryItemMap = inventoryItems.stream().collect(Collectors.toMap(x->x.getSerialNumber(), x->x, (u,v)->v.getCreateTimestamp().isAfter(u.getCreateTimestamp()) ? v : u));
-
 
1001
        return inventoryItemMap;
-
 
1002
    }
977
}
1003
}