Rev 34468 | Go to most recent revision | 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.dao.cart.CartService;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.inventory.SaholicCISTable;import com.spice.profitmandi.dao.model.CartItem;import com.spice.profitmandi.dao.model.UserCart;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.dtr.UserAccountRepository;import com.spice.profitmandi.dao.repository.inventory.SaholicCISTableRepository;import com.spice.profitmandi.service.order.BulkOrderService;import com.spice.profitmandi.service.transaction.TransactionService;import com.spice.profitmandi.service.wallet.CommonPaymentService;import com.spice.profitmandi.service.wallet.WalletService;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.ArrayList;import java.util.Arrays;import java.util.List;@Componentpublic class LiquidationService {private static final Logger LOGGER = LogManager.getLogger(LiquidationService.class);@AutowiredBidRepository bidRepository;@AutowiredLiquidationRepository liquidationRepository;@Autowiredprivate ItemRepository itemRepository;@Autowiredprivate UserAccountRepository userAccountRepository;@Autowiredprivate TransactionService transactionService;@Autowiredprivate CommonPaymentService commonPaymentService;@Autowiredprivate CartService cartService;@AutowiredSaholicCISTableRepository saholicCISTableRepository;@AutowiredWalletService walletService;@Autowiredprivate BulkOrderService bulkOrderService;public void processBids(ProfitMandiConstants.BID_CRON_ENUM type) throws Exception {List<Liquidation> liquidations;if (type.equals(ProfitMandiConstants.BID_CRON_ENUM.YESTERDAY)){liquidations = liquidationRepository.selectAllByEndDate(LocalDateTime.now().minusDays(1));} else {liquidations = liquidationRepository.selectAllByEndDate(LocalDateTime.now());}LOGGER.info("liquidations: {}",liquidations);if (liquidations.size() > 0) {for (Liquidation liquidation : liquidations) {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().filter(x -> x.getNetAvailability() > 0).count();}List<Bid> bids = bidRepository.selectAllBidByLiquidationIdAndStatus(liquidation.getId(), Arrays.asList(ProfitMandiConstants.BID_ENUM.PENDING, ProfitMandiConstants.BID_ENUM.PROCESSING));for (Bid bid : bids) {if (remainingQty >= bid.getQuantity()) {List<BulkOrderModel> bulkOrderModels = new ArrayList<>();BulkOrderModel bulkOrderModel = new BulkOrderModel();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);bulkOrderService.generatePurchaseOrder(bulkOrderModels, bid.getFofoId(), ProfitMandiConstants.PO_TYPE.AUTO);remainingQty -= bid.getQuantity();//this.generatePurchaseOrder(liquidation, bid, item, remainingQty, type);}}liquidation.setQuantity((int) remainingQty);liquidation.setStatus(ProfitMandiConstants.LIQUIDATION_ENUM.CLOSED);}}}}public void generatePurchaseOrder(Liquidation liquidation, Bid bid, Item item, long remainingQty, ProfitMandiConstants.BID_CRON_ENUM type) throws Exception {UserCart uc = userAccountRepository.getUserCart(bid.getFofoId());double walletAmount = walletService.getWalletAmount(uc.getUserId());double orderAmount = (bid.getBiddingAmount() * bid.getQuantity());if (walletAmount >= orderAmount) {List<CartItem> cartItems = new ArrayList<>();CartItem cartItem = new CartItem();cartItem.setItemId(item.getId());cartItem.setQuantity(bid.getQuantity());cartItem.setSellingPrice(bid.getBiddingAmount());cartItems.add(cartItem);cartService.addItemsToCart(uc.getCartId(), cartItems);liquidation.setQuantity((int) remainingQty - bid.getQuantity());bid.setStatus(ProfitMandiConstants.BID_ENUM.CLOSED);int transactionId = transactionService.createTransaction(uc, orderAmount, 0);commonPaymentService.payThroughWallet(transactionId);} else {if (remainingQty <= bid.getQuantity() || (type.equals(ProfitMandiConstants.BID_CRON_ENUM.YESTERDAY))){bid.setStatus(ProfitMandiConstants.BID_ENUM.CANCELLED);} else {bid.setStatus(ProfitMandiConstants.BID_ENUM.PROCESSING);liquidation.setQuantity((int) remainingQty - bid.getQuantity());bulkOrderService.notifyPartnerRBM(walletAmount, orderAmount, bid.getFofoId());}}}}