| 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);
|