Rev 21926 | Rev 22014 | Go to most recent revision | View as "text/plain" | Blame | Compare with Previous | Last modification | View Log | RSS feed
package com.spice.profitmandi.service.pricing;import java.util.HashMap;import java.util.HashSet;import java.util.List;import java.util.Map;import java.util.Set;import org.apache.commons.collections.CollectionUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;import com.spice.profitmandi.dao.entity.fofo.TagListing;import com.spice.profitmandi.dao.entity.user.Address;import com.spice.profitmandi.dao.repository.dtr.RetailerRegisteredAddressRepository;import com.spice.profitmandi.dao.repository.fofo.PinCodeTagRepository;import com.spice.profitmandi.dao.repository.fofo.RetailerTagRepository;import com.spice.profitmandi.dao.repository.fofo.TagListingRepository;import com.spice.profitmandi.dao.repository.user.AddressRepository;import com.spice.profitmandi.service.tag.TagService;@Componentpublic class PricingServiceImpl implements PricingService{@AutowiredRetailerRegisteredAddressRepository retailerRegisteredAddressRepository;@AutowiredAddressRepository addressRepository;@AutowiredPinCodeTagRepository pinCodeTagRepository;@AutowiredTagService tagService;@AutowiredRetailerTagRepository retailerTagRepository;@AutowiredTagListingRepository tagListingRepository;@SuppressWarnings("unchecked")@Overridepublic Map<Integer, Float> getPrice(Set<Integer> itemIds, int retailerId) {Map<Integer, Float> itemIdPrice = this.preparePriceDefaultValues(itemIds);int addressId;try {addressId = retailerRegisteredAddressRepository.selectAddressIdByRetailerId(retailerId);Address retailerAddress = addressRepository.selectById(addressId);Set<Integer> pinCodeTagIds = tagService.getFofoTagIdsByPinCode(retailerAddress.getPinCode());Set<Integer> pinNegativeTagIds = tagService.getPinCodeNegativeTagIds();Set<Integer> pinCodeIntersection = new HashSet<>(CollectionUtils.intersection(pinCodeTagIds, pinNegativeTagIds));Set<Integer> filterPinCodeTagIds = new HashSet<>(CollectionUtils.subtract(pinNegativeTagIds, pinCodeIntersection));Set<Integer> pinPositiveTagIds = tagService.getPinCodePositiveTagIds();filterPinCodeTagIds.addAll(pinPositiveTagIds);if(filterPinCodeTagIds.isEmpty()){return itemIdPrice;}Set<Integer> retailerTagIds = tagService.getUserTagIdsByTagIds(filterPinCodeTagIds);Set<Integer> userNegativeTagIds = tagService.getUserNegativeTagIds();Set<Integer> userIntersection = new HashSet<>(CollectionUtils.intersection(retailerTagIds, userNegativeTagIds));Set<Integer> filterUserTagIds = new HashSet<>(CollectionUtils.subtract(userNegativeTagIds, userIntersection));Set<Integer> userPositiveTagIds = tagService.getUserPositiveTagIds();filterUserTagIds.addAll(userPositiveTagIds);if(filterUserTagIds.isEmpty()){return itemIdPrice;}List<TagListing> tagListings = tagListingRepository.selectByItemIdsAndTagIds(itemIds, filterUserTagIds);if(tagListings.isEmpty()){return itemIdPrice;}for(TagListing tagListing : tagListings){if(itemIdPrice.get(tagListing.getItemId()) > tagListing.getSellingPrice()){itemIdPrice.put(tagListing.getItemId(), tagListing.getSellingPrice());}}} catch (ProfitMandiBusinessException e) {e.printStackTrace();}return itemIdPrice;}private Map<Integer, Float> preparePriceDefaultValues(Set<Integer> itemIds){Map<Integer, Float> itemIdPrice = new HashMap<>(itemIds.size());for(int itemId : itemIds){itemIdPrice.put(itemId, Float.MAX_VALUE);}return itemIdPrice;}}