Rev 34592 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package com.spice.profitmandi.dao.service;import com.spice.profitmandi.common.model.BulkOrderModel;import com.spice.profitmandi.common.model.ProfitMandiConstants;import com.spice.profitmandi.common.util.StringUtils;import com.spice.profitmandi.dao.entity.catalog.Bid;import com.spice.profitmandi.dao.entity.catalog.Item;import com.spice.profitmandi.dao.entity.catalog.Liquidation;import com.spice.profitmandi.dao.entity.catalog.TagListing;import com.spice.profitmandi.dao.entity.inventory.SaholicCISTable;import com.spice.profitmandi.dao.repository.catalog.BidRepository;import com.spice.profitmandi.dao.repository.catalog.ItemRepository;import com.spice.profitmandi.dao.repository.catalog.LiquidationRepository;import com.spice.profitmandi.dao.repository.catalog.TagListingRepository;import com.spice.profitmandi.dao.repository.inventory.SaholicCISTableRepository;import com.spice.profitmandi.service.NotificationService;import com.spice.profitmandi.service.order.BulkOrderService;import com.spice.profitmandi.service.whatsapp.WhatsappMessageType;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import java.time.LocalDateTime;import java.util.*;@Componentpublic class LiquidationService {private static final Logger LOGGER = LogManager.getLogger(LiquidationService.class);@AutowiredBidRepository bidRepository;@AutowiredLiquidationRepository liquidationRepository;@Autowiredprivate ItemRepository itemRepository;@Autowiredprivate BidService bidService;@AutowiredSaholicCISTableRepository saholicCISTableRepository;@Autowiredprivate BulkOrderService bulkOrderService;@Autowiredprivate TagListingRepository tagListingRepository;@Autowiredprivate NotificationService notificationService;public void processBids(ProfitMandiConstants.BID_CRON_ENUM type) throws Exception {List<Liquidation> liquidations;boolean canRefund = true;List<Map<String, Object>> liquidationList = new ArrayList<>();if (type.equals(ProfitMandiConstants.BID_CRON_ENUM.YESTERDAY)){liquidations = liquidationRepository.selectAllByEndDate(LocalDateTime.now().minusDays(1));canRefund = false;} else {liquidations = liquidationRepository.selectAllByEndDate(LocalDateTime.now());}LOGGER.info("liquidations for {}: {}",type,liquidations);if (liquidations.size() > 0) {for (Liquidation liquidation : liquidations) {Map<String, Object> liquidationsMap = new HashMap<>();try {List<Item> items = itemRepository.selectAllByCatalogItemId(liquidation.getCatalogId());if (items.size() > 0) {long remainingQty = 0;for (Item item : items) {List<SaholicCISTable> saholicCISTable = saholicCISTableRepository.selectAllByItemId(item.getId());remainingQty += saholicCISTable.stream().mapToInt(SaholicCISTable::getAvailability).sum();}List<Bid> bids = bidRepository.selectAllBidByLiquidationIdAndStatus(liquidation.getId(), Arrays.asList(ProfitMandiConstants.BID_ENUM.PENDING, ProfitMandiConstants.BID_ENUM.PROCESSING));liquidationsMap.put("id",liquidation.getId());liquidationsMap.put("catalog",items.get(0).getItemDescription());liquidationsMap.put("basePrice",liquidation.getPrice());liquidationsMap.put("openingStock",liquidation.getQuantity());liquidationsMap.put("endDate",StringUtils.toLocalDateTime(String.valueOf(liquidation.getEndDate())));List<Bid> bidsList = new ArrayList<>();if (bids.size() > 0) {ProfitMandiConstants.BID_ENUM bidStatus = ProfitMandiConstants.BID_ENUM.PENDING;for (Bid bid : bids) {LOGGER.info("remainingQty: {}", remainingQty);if (remainingQty >= bid.getQuantity()) {try {List<BulkOrderModel> bulkOrderModels = new ArrayList<>();BulkOrderModel bulkOrderModel = new BulkOrderModel();bulkOrderModel.setRowIndex(bid.getId());bulkOrderModel.setFofoId(bid.getFofoId());bulkOrderModel.setItemId(items.get(0).getId());bulkOrderModel.setQuantity(bid.getQuantity());bulkOrderModel.setDescription(items.get(0).getItemDescription());bulkOrderModel.setItemPrice(bid.getBiddingAmount());bulkOrderModels.add(bulkOrderModel);bidStatus = bulkOrderService.generatePurchaseOrder(bulkOrderModels, bid.getFofoId(), ProfitMandiConstants.PO_TYPE.AUTO, type);remainingQty -= bid.getQuantity();} catch (Exception exception) {LOGGER.info("generatePurchaseOrder if exception: ", exception);}} else {try {bidStatus = bidService.cancelYesterdayProcessBid(bid);if (canRefund || remainingQty < 1) {bidService.refundBidAmountToWallet(bid, bidStatus);}} catch (Exception exception) {LOGGER.info("generatePurchaseOrder else exception: ", exception);}}bid.setStatus(bidStatus);bidsList.add(bid);}}liquidationsMap.put("bids",bidsList);liquidation.setQuantity((int) remainingQty);liquidation.setStatus(ProfitMandiConstants.LIQUIDATION_ENUM.CLOSED);LOGGER.info("generatePurchaseOrder qty final: {} = {}",remainingQty, liquidation.getStatus());liquidationsMap.put("closingStock",liquidation.getQuantity());}} catch (Exception exception){LOGGER.info("generatePurchaseOrder loop: ",exception);}liquidationList.add(liquidationsMap);}LOGGER.info("liquidationList: {}",liquidationList);bidService.sendLiquidationReport(liquidationList);}}public void consolidatedBiddingMessage() throws Exception {List<Liquidation> liquidations = liquidationRepository.selectAllByStatus(ProfitMandiConstants.LIQUIDATION_ENUM.PUBLISHED);LOGGER.info("consolidatedBiddingMessage liquidations: {}",liquidations);if (liquidations.size() > 0) {StringBuilder message = new StringBuilder("*Bidding Update!*\n" +"Place your best bids and unlock unbeatable price on smartphones!\n");//StringBuilder templateMessage = new StringBuilder("bidd_live");for (Liquidation liquidation : liquidations) {List<Item> items = itemRepository.selectAllByCatalogItemId(liquidation.getCatalogId());List<Bid> bids = bidRepository.selectBidByLiquidationId(liquidation.getId());if (items.size() > 0) {long remainingQty = 0;for (Item item : items) {List<SaholicCISTable> saholicCISTable = saholicCISTableRepository.selectAllByItemId(item.getId());remainingQty += saholicCISTable.stream().mapToInt(SaholicCISTable::getAvailability).sum();}TagListing tagListing = tagListingRepository.selectByItemId(items.get(0).getId());liquidation.setQuantity((int) remainingQty);if (liquidation.getQuantity() > 0){double mrp = tagListing.getMrp();double discountPercentage = ((mrp - liquidation.getPrice()) / mrp) * 100;message.append("\n").append("*").append(items.get(0).getItemDescription()).append(" at ").append(Math.round(discountPercentage)).append("% Off*\n").append("Starting price: *").append(liquidation.getPrice()).append("*\n");if (bids.size() > 0) {message.append("Top Bid: *").append(bids.get(0).getBiddingAmount()).append("*\n");}message.append("Ending on: *").append(StringUtils.toLocalDateTime(liquidation.getEndDate().toString())).append("*\n");//templateMessage.append("|").append(items.get(0).getItemDescription()).append("|").append(liquidation.getPrice()).append("|").append(StringUtils.toLocalDateTime(liquidation.getEndDate().toString()));}}}message.append("\nDon't miss out. Submit your bid now and grab the deal before it's gone!");LOGGER.info("templateMessage : {}",message.toString());bidService.biddingLiveNotification(message.toString(), "https://images.smartdukaan.com/uploads/whatsapp.jpeg");//notificationService.sendWhatsappMessage(message, "Bidding Live Now!", "8529003611");//notificationService.sendWhatsappMediaMessage(message.toString(), "8529003611", "https://images.smartdukaan.com/uploads/whatsapp.jpeg","whatsapp.jpeg", WhatsappMessageType.IMAGE);}}}