Subversion Repositories SmartDukaan

Rev

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

Rev 35733 Rev 35736
Line 395... Line 395...
395
        Map<Integer, CustomFofoOrderItem> itemIdCustomFofoOrderItemMap = new HashMap<>();
395
        Map<Integer, CustomFofoOrderItem> itemIdCustomFofoOrderItemMap = new HashMap<>();
396
        Map<Integer, Float> lineItemPrice = new HashMap<>(); // this is for pricing error
396
        Map<Integer, Float> lineItemPrice = new HashMap<>(); // this is for pricing error
397
 
397
 
398
        float totalAmount = 0;
398
        float totalAmount = 0;
399
        boolean noGST = false;
399
        boolean noGST = false;
400
        int changedTotalBillAmount = 0;
-
 
401
        for (CustomPaymentOption cpo : createOrderRequest.getPaymentOptions()) {
-
 
402
            changedTotalBillAmount += cpo.getAmount();
-
 
403
        }
-
 
404
 
400
 
405
        // N+1 fix: Batch fetch all PendingOrderItems before the validation loop
401
        // N+1 fix: Batch fetch all PendingOrderItems before the validation loop
406
        List<Integer> validationPoiIds = createOrderRequest.getFofoOrderItems().stream()
402
        List<Integer> validationPoiIds = createOrderRequest.getFofoOrderItems().stream()
407
                .map(CustomFofoOrderItem::getPoiId)
403
                .map(CustomFofoOrderItem::getPoiId)
408
                .filter(id -> id > 0)
404
                .filter(id -> id > 0)
Line 597... Line 593...
597
        }
593
        }
598
 
594
 
599
        // Lets reduce quantity and decide what inventory items to use.
595
        // Lets reduce quantity and decide what inventory items to use.
600
        for (Item item : items) {
596
        for (Item item : items) {
601
            if (item.getType().equals(ItemType.SERIALIZED)) {
597
            if (item.getType().equals(ItemType.SERIALIZED)) {
-
 
598
                Set<InventoryItem> inventoryItemsSerializedserialized = serializedInventoryItemMap.get(item.getId());
-
 
599
                if (inventoryItemsSerializedserialized == null) {
-
 
600
                    List<String> invalidSerialNumbers = itemIdCustomFofoOrderItemMap.get(item.getId()).getSerialNumberDetails().stream().map(x -> x.getSerialNumber()).collect(Collectors.toList());
-
 
601
                    throw new ProfitMandiBusinessException("invalidSerialNumbers", invalidSerialNumbers, "FFORDR_1004");
602
                // TODO:handle null
602
                }
603
                if (serializedInventoryItemMap.get(item.getId()) == null || itemIdCustomFofoOrderItemMap.get(item.getId()).getSerialNumberDetails().size() != serializedInventoryItemMap.get(item.getId()).size()) {
603
                if (itemIdCustomFofoOrderItemMap.get(item.getId()).getSerialNumberDetails().size() != inventoryItemsSerializedserialized.size()) {
604
                    LOGGER.info("InsuredModels: {}, and Serialized: {}", insuredModels.size(), itemIdCustomFofoOrderItemMap.get(item.getId()).getSerialNumberDetails().size());
604
                    LOGGER.info("InsuredModels: {}, and Serialized: {}", insuredModels.size(), itemIdCustomFofoOrderItemMap.get(item.getId()).getSerialNumberDetails().size());
605
                    if (itemIdCustomFofoOrderItemMap.get(item.getId()).getSerialNumberDetails().size() != insuredModels.size()) {
605
                    if (itemIdCustomFofoOrderItemMap.get(item.getId()).getSerialNumberDetails().size() != insuredModels.size()) {
606
                        List<String> invalidSerialNumbers = itemIdCustomFofoOrderItemMap.get(item.getId()).getSerialNumberDetails().stream().map(x -> x.getSerialNumber()).collect(Collectors.toList());
606
                        List<String> invalidSerialNumbers = itemIdCustomFofoOrderItemMap.get(item.getId()).getSerialNumberDetails().stream().map(x -> x.getSerialNumber()).collect(Collectors.toList());
607
                        throw new ProfitMandiBusinessException("invalidSerialNumbers", invalidSerialNumbers, "FFORDR_1004");
607
                        throw new ProfitMandiBusinessException("invalidSerialNumbers", invalidSerialNumbers, "FFORDR_1004");
608
                    }
608
                    }
609
                }
609
                }
610
 
-
 
611
                Set<InventoryItem> inventoryItemsSerializedserialized = serializedInventoryItemMap.get(item.getId());
-
 
612
                for (InventoryItem inventoryItem : inventoryItemsSerializedserialized) {
610
                for (InventoryItem inventoryItem : inventoryItemsSerializedserialized) {
613
                    inventoryItem.setGoodQuantity(0);
611
                    inventoryItem.setGoodQuantity(0);
614
                    inventoryItemIdQuantityUsed.put(inventoryItem.getId(), 1);
612
                    inventoryItemIdQuantityUsed.put(inventoryItem.getId(), 1);
615
                    LiveDemoSerialNumber liveDemoSerialNumber = liveDemoSerialNumberMap.get(inventoryItem.getSerialNumber());
613
                    LiveDemoSerialNumber liveDemoSerialNumber = liveDemoSerialNumberMap.get(inventoryItem.getSerialNumber());
616
                    if (liveDemoSerialNumber != null) {
614
                    if (liveDemoSerialNumber != null) {
Line 671... Line 669...
671
        if (customerAddress == null || customerAddress.getState() == null || customerAddress.getState().equals(retailerAddress.getState())) {
669
        if (customerAddress == null || customerAddress.getState() == null || customerAddress.getState().equals(retailerAddress.getState())) {
672
            try {
670
            try {
673
                State state = stateRepository.selectByName(retailerAddress.getState());
671
                State state = stateRepository.selectByName(retailerAddress.getState());
674
                stateId = Long.valueOf(state.getId()).intValue();
672
                stateId = Long.valueOf(state.getId()).intValue();
675
            } catch (Exception e) {
673
            } catch (Exception e) {
676
                LOGGER.error("Unable to get state rates");
674
                LOGGER.error("Unable to get state rates for state: {}", retailerAddress.getState(), e);
677
            }
675
            }
678
        }
676
        }
679
 
677
 
680
        // N+1 fix: Pre-fetch tagListings and GST rates before the loop
678
        // N+1 fix: Pre-fetch tagListings and GST rates before the loop
681
        Map<Integer, TagListing> tagListingMap = tagListingRepository.selectByItemIds(itemIdCustomFofoOrderItemMap.keySet());
679
        Map<Integer, TagListing> tagListingMap = tagListingRepository.selectByItemIds(itemIdCustomFofoOrderItemMap.keySet());
Line 760... Line 758...
760
                }
758
                }
761
            }
759
            }
762
 
760
 
763
            po.setStatus(OrderStatus.BILLED);
761
            po.setStatus(OrderStatus.BILLED);
764
        }
762
        }
-
 
763
        //Process scratch (only if smartphone in order — processScratchOffer re-queries items)
765
        //Process scratch
764
        if (smartPhone) {
766
        this.processScratchOffer(fofoOrder);
765
            this.processScratchOffer(fofoOrder);
-
 
766
        }
767
 
767
 
768
//        persist the data of upgrade offer table
768
//        persist the data of upgrade offer table
769
        for (CustomFofoOrderItem customFofoOrderItem : createOrderRequest.getFofoOrderItems()) {
769
        for (CustomFofoOrderItem customFofoOrderItem : createOrderRequest.getFofoOrderItems()) {
770
            if (customFofoOrderItem.getCustomerOfferItemId().size() > 0) {
770
            if (customFofoOrderItem.getCustomerOfferItemId().size() > 0) {
771
                for (Integer customerOfferItemId : customFofoOrderItem.getCustomerOfferItemId()) {
771
                for (Integer customerOfferItemId : customFofoOrderItem.getCustomerOfferItemId()) {
Line 853... Line 853...
853
            if (LocalDateTime.now().isAfter(startDate.atStartOfDay()) && LocalDateTime.now().isBefore(endDate.atTime(Utils.MAX_TIME))) {
853
            if (LocalDateTime.now().isAfter(startDate.atStartOfDay()) && LocalDateTime.now().isBefore(endDate.atTime(Utils.MAX_TIME))) {
854
                Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
854
                Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
855
                try {
855
                try {
856
                    this.sendAppDownloadBillingOffer(customer.getMobileNumber());
856
                    this.sendAppDownloadBillingOffer(customer.getMobileNumber());
857
                } catch (Exception e) {
857
                } catch (Exception e) {
858
                    // TODO Auto-generated catch block
858
                    LOGGER.error("Failed to send app download billing offer for customer {}", customer.getMobileNumber(), e);
859
                    e.printStackTrace();
-
 
860
                }
859
                }
861
                if (specificPriceOffer) {
860
                if (specificPriceOffer) {
862
                    this.createSpecificPriceScratchOffer(fofoOrder.getInvoiceNumber(), fofoOrder.getCustomerId(), fofoOrder.getFofoId(), maxPurchaseValue);
861
                    this.createSpecificPriceScratchOffer(fofoOrder.getInvoiceNumber(), fofoOrder.getCustomerId(), fofoOrder.getFofoId(), maxPurchaseValue);
863
                } else if (randomOffer) {
862
                } else if (randomOffer) {
864
                    this.createRandomScratchOffer(fofoOrder.getInvoiceNumber(), fofoOrder.getCustomerId());
863
                    this.createRandomScratchOffer(fofoOrder.getInvoiceNumber(), fofoOrder.getCustomerId());
Line 1898... Line 1897...
1898
        }
1897
        }
1899
        fofoOrderItem.setDiscount(customFofoOrderItem.getDiscountAmount());
1898
        fofoOrderItem.setDiscount(customFofoOrderItem.getDiscountAmount());
1900
 
1899
 
1901
        Item item = itemMap.get(customFofoOrderItem.getItemId());
1900
        Item item = itemMap.get(customFofoOrderItem.getItemId());
1902
 
1901
 
1903
        // N+1 fix: Use pre-fetched gstRateMap instead of querying per item
1902
        // Use first inventory item to get HSN code and GST rates
1904
        for (InventoryItem inventoryItem : inventoryItems) {
1903
        InventoryItem firstInventoryItem = inventoryItems.iterator().next();
1905
            GstRate gstRate = gstRateMap.get(inventoryItem.getItemId());
1904
        GstRate gstRate = gstRateMap.get(firstInventoryItem.getItemId());
1906
            if (gstRate != null) {
1905
        if (gstRate != null) {
1907
                fofoOrderItem.setIgstRate(gstRate.getIgstRate());
1906
            fofoOrderItem.setIgstRate(gstRate.getIgstRate());
1908
                fofoOrderItem.setCgstRate(gstRate.getCgstRate());
1907
            fofoOrderItem.setCgstRate(gstRate.getCgstRate());
1909
                fofoOrderItem.setSgstRate(gstRate.getSgstRate());
1908
            fofoOrderItem.setSgstRate(gstRate.getSgstRate());
1910
            }
-
 
1911
            fofoOrderItem.setHsnCode(inventoryItem.getHsnCode());
-
 
1912
            break;
-
 
1913
        }
1909
        }
-
 
1910
        fofoOrderItem.setHsnCode(firstInventoryItem.getHsnCode());
1914
        fofoOrderItem.setBrand(item.getBrand());
1911
        fofoOrderItem.setBrand(item.getBrand());
1915
        fofoOrderItem.setModelName(item.getModelName());
1912
        fofoOrderItem.setModelName(item.getModelName());
1916
        fofoOrderItem.setModelNumber(item.getModelNumber());
1913
        fofoOrderItem.setModelNumber(item.getModelNumber());
1917
        fofoOrderItem.setColor(item.getColor());
1914
        fofoOrderItem.setColor(item.getColor());
1918
        fofoOrderItemRepository.persist(fofoOrderItem);
1915
        fofoOrderItemRepository.persist(fofoOrderItem);