Subversion Repositories SmartDukaan

Rev

Rev 21895 | Rev 22009 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
21801 ashik.ali 1
package com.spice.profitmandi.service.pricing;
2
 
21926 ashik.ali 3
import java.util.HashMap;
21801 ashik.ali 4
import java.util.HashSet;
5
import java.util.List;
21926 ashik.ali 6
import java.util.Map;
21801 ashik.ali 7
import java.util.Set;
8
 
21867 ashik.ali 9
import org.apache.commons.collections.CollectionUtils;
21801 ashik.ali 10
import org.springframework.beans.factory.annotation.Autowired;
21895 ashik.ali 11
import org.springframework.stereotype.Component;
21801 ashik.ali 12
 
13
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
14
import com.spice.profitmandi.dao.entity.fofo.RetailerTag;
15
import com.spice.profitmandi.dao.entity.fofo.TagListing;
16
import com.spice.profitmandi.dao.entity.user.Address;
17
import com.spice.profitmandi.dao.repository.dtr.RetailerRegisteredAddressRepository;
18
import com.spice.profitmandi.dao.repository.fofo.PinCodeTagRepository;
19
import com.spice.profitmandi.dao.repository.fofo.RetailerTagRepository;
20
import com.spice.profitmandi.dao.repository.fofo.TagListingRepository;
21
import com.spice.profitmandi.dao.repository.user.AddressRepository;
22
import com.spice.profitmandi.service.tag.TagService;
23
 
21895 ashik.ali 24
@Component
21801 ashik.ali 25
public class PricingServiceImpl implements PricingService{
26
 
27
	@Autowired
28
	RetailerRegisteredAddressRepository retailerRegisteredAddressRepository;
29
 
30
	@Autowired
31
	AddressRepository addressRepository;
32
 
33
	@Autowired
34
	PinCodeTagRepository pinCodeTagRepository;
35
 
36
	@Autowired
37
	TagService tagService;
38
 
39
	@Autowired
40
	RetailerTagRepository retailerTagRepository;
41
 
42
	@Autowired
43
	TagListingRepository tagListingRepository;
44
 
21867 ashik.ali 45
	@SuppressWarnings("unchecked")
21801 ashik.ali 46
	@Override
21926 ashik.ali 47
	public Map<Integer, Float> getPrice(Set<Integer> itemIds, int retailerId) {
48
		Map<Integer, Float> itemIdPrice = this.preparePriceDefaultValues(itemIds);
21801 ashik.ali 49
		int addressId;
50
		try {
21867 ashik.ali 51
 
21801 ashik.ali 52
			addressId = retailerRegisteredAddressRepository.selectAddressIdByRetailerId(retailerId);
53
			Address retailerAddress = addressRepository.selectById(addressId);
54
			Set<Integer> pinCodeTagIds = tagService.getFofoTagIdsByPinCode(retailerAddress.getPinCode());
55
			if(pinCodeTagIds.isEmpty()){
21926 ashik.ali 56
				return itemIdPrice;
21801 ashik.ali 57
			}
21867 ashik.ali 58
			Set<Integer> pinPositiveTagIds = tagService.getPinCodePositiveTagIds();
59
			if(pinPositiveTagIds.isEmpty()){
21926 ashik.ali 60
				return itemIdPrice;
21867 ashik.ali 61
			}
62
			Set<Integer> pinCodeIntersection = (Set<Integer>)CollectionUtils.intersection(pinCodeTagIds, pinPositiveTagIds);
63
			Set<Integer> pinCodeUnion = (Set<Integer>) CollectionUtils.union(pinCodeTagIds, pinPositiveTagIds);
64
			Set<Integer> filterPinCodeTagIds = (Set<Integer>)CollectionUtils.subtract(pinCodeUnion, pinCodeIntersection);
65
			if(filterPinCodeTagIds.isEmpty()){
21926 ashik.ali 66
				return itemIdPrice;
21867 ashik.ali 67
			}
68
			List<RetailerTag> retailerTags = retailerTagRepository.selectByTagIds(filterPinCodeTagIds);
21801 ashik.ali 69
			if(retailerTags.isEmpty()){
21926 ashik.ali 70
				return itemIdPrice;
21801 ashik.ali 71
			}
72
			Set<Integer> retailerTagIds = new HashSet<>();
73
			for(RetailerTag retailerTag : retailerTags){
74
				retailerTagIds.add(retailerTag.getTagId());
75
			}
21867 ashik.ali 76
			Set<Integer> userPositiveTagIds = tagService.getUserPositiveTagIds();
77
			Set<Integer> userIntersection = (Set<Integer>)CollectionUtils.intersection(retailerTagIds, userPositiveTagIds);
78
			Set<Integer> userUnion = (Set<Integer>)CollectionUtils.union(retailerTagIds, userPositiveTagIds);
79
			Set<Integer> filterUserTagIds = (Set<Integer>)CollectionUtils.subtract(userUnion, userIntersection);
80
			if(filterUserTagIds.isEmpty()){
21926 ashik.ali 81
				return itemIdPrice;
21867 ashik.ali 82
			}
21870 ashik.ali 83
			List<TagListing> tagListings = tagListingRepository.selectByItemIdsAndTagIds(itemIds, filterUserTagIds);
21926 ashik.ali 84
 
21801 ashik.ali 85
			if(tagListings.isEmpty()){
21926 ashik.ali 86
				return itemIdPrice;
21801 ashik.ali 87
			}
88
			for(TagListing tagListing : tagListings){
21926 ashik.ali 89
				if(itemIdPrice.get(tagListing.getItemId()) > tagListing.getSellingPrice()){
90
					itemIdPrice.put(tagListing.getItemId(), tagListing.getSellingPrice());
21801 ashik.ali 91
				}
92
			}
93
		} catch (ProfitMandiBusinessException e) {
94
			e.printStackTrace();
95
		}
21926 ashik.ali 96
		return itemIdPrice;
21801 ashik.ali 97
	}
98
 
21926 ashik.ali 99
	private Map<Integer, Float> preparePriceDefaultValues(Set<Integer> itemIds){
100
		Map<Integer, Float> itemIdPrice = new HashMap<>(itemIds.size());
101
		for(int itemId : itemIds){
102
			itemIdPrice.put(itemId, Float.MAX_VALUE);
103
		}
104
		return itemIdPrice;
105
	}
106
 
21801 ashik.ali 107
}