Subversion Repositories SmartDukaan

Rev

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