Subversion Repositories SmartDukaan

Rev

Rev 27377 | Rev 27396 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 27377 Rev 27395
Line 2... Line 2...
2
 
2
 
3
import java.text.MessageFormat;
3
import java.text.MessageFormat;
4
import java.time.LocalDateTime;
4
import java.time.LocalDateTime;
5
import java.util.ArrayList;
5
import java.util.ArrayList;
6
import java.util.Arrays;
6
import java.util.Arrays;
-
 
7
import java.util.Comparator;
7
import java.util.HashMap;
8
import java.util.HashMap;
8
import java.util.HashSet;
9
import java.util.HashSet;
9
import java.util.List;
10
import java.util.List;
10
import java.util.Map;
11
import java.util.Map;
11
import java.util.Set;
12
import java.util.Set;
Line 14... Line 15...
14
import javax.persistence.criteria.CriteriaBuilder;
15
import javax.persistence.criteria.CriteriaBuilder;
15
import javax.persistence.criteria.CriteriaQuery;
16
import javax.persistence.criteria.CriteriaQuery;
16
import javax.persistence.criteria.Predicate;
17
import javax.persistence.criteria.Predicate;
17
import javax.persistence.criteria.Root;
18
import javax.persistence.criteria.Root;
18
 
19
 
-
 
20
import org.apache.commons.collections.ListUtils;
19
import org.apache.logging.log4j.LogManager;
21
import org.apache.logging.log4j.LogManager;
20
import org.apache.logging.log4j.Logger;
22
import org.apache.logging.log4j.Logger;
21
import org.hibernate.Session;
23
import org.hibernate.Session;
22
import org.hibernate.SessionFactory;
24
import org.hibernate.SessionFactory;
23
import org.hibernate.query.Query;
25
import org.hibernate.query.Query;
24
import org.springframework.beans.factory.annotation.Autowired;
26
import org.springframework.beans.factory.annotation.Autowired;
25
import org.springframework.beans.factory.annotation.Qualifier;
27
import org.springframework.beans.factory.annotation.Qualifier;
26
import org.springframework.cache.annotation.Cacheable;
28
import org.springframework.cache.annotation.Cacheable;
27
import org.springframework.stereotype.Component;
29
import org.springframework.stereotype.Component;
28
 
30
 
-
 
31
import com.mysql.fabric.xmlrpc.base.Array;
29
import com.spice.profitmandi.common.enumuration.ItemType;
32
import com.spice.profitmandi.common.enumuration.ItemType;
30
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
33
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
31
import com.spice.profitmandi.common.model.ProfitMandiConstants;
34
import com.spice.profitmandi.common.model.ProfitMandiConstants;
32
import com.spice.profitmandi.common.model.SchemeModel;
35
import com.spice.profitmandi.common.model.SchemeModel;
-
 
36
import com.spice.profitmandi.common.util.FormattingUtils;
33
import com.spice.profitmandi.common.util.StringUtils;
37
import com.spice.profitmandi.common.util.StringUtils;
34
import com.spice.profitmandi.dao.entity.catalog.Item;
38
import com.spice.profitmandi.dao.entity.catalog.Item;
35
import com.spice.profitmandi.dao.entity.catalog.RetailerScheme;
39
import com.spice.profitmandi.dao.entity.catalog.RetailerScheme;
36
import com.spice.profitmandi.dao.entity.catalog.Scheme;
40
import com.spice.profitmandi.dao.entity.catalog.Scheme;
-
 
41
import com.spice.profitmandi.dao.entity.fofo.ActivatedImei;
37
import com.spice.profitmandi.dao.entity.fofo.FofoOrder;
42
import com.spice.profitmandi.dao.entity.fofo.FofoOrder;
38
import com.spice.profitmandi.dao.entity.fofo.InventoryItem;
43
import com.spice.profitmandi.dao.entity.fofo.InventoryItem;
39
import com.spice.profitmandi.dao.entity.fofo.PartnerType;
44
import com.spice.profitmandi.dao.entity.fofo.PartnerType;
-
 
45
import com.spice.profitmandi.dao.entity.fofo.PendingOrder;
40
import com.spice.profitmandi.dao.entity.fofo.Purchase;
46
import com.spice.profitmandi.dao.entity.fofo.Purchase;
41
import com.spice.profitmandi.dao.entity.fofo.ScanRecord;
47
import com.spice.profitmandi.dao.entity.fofo.ScanRecord;
42
import com.spice.profitmandi.dao.entity.fofo.SchemeInOut;
48
import com.spice.profitmandi.dao.entity.fofo.SchemeInOut;
43
import com.spice.profitmandi.dao.entity.fofo.SchemeItem;
49
import com.spice.profitmandi.dao.entity.fofo.SchemeItem;
44
import com.spice.profitmandi.dao.entity.transaction.PriceDrop;
50
import com.spice.profitmandi.dao.entity.transaction.PriceDrop;
Line 49... Line 55...
49
import com.spice.profitmandi.dao.model.CreateSchemeRequest;
55
import com.spice.profitmandi.dao.model.CreateSchemeRequest;
50
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
56
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
51
import com.spice.profitmandi.dao.repository.catalog.SchemeRepository;
57
import com.spice.profitmandi.dao.repository.catalog.SchemeRepository;
52
import com.spice.profitmandi.dao.repository.catalog.TagListingRepository;
58
import com.spice.profitmandi.dao.repository.catalog.TagListingRepository;
53
import com.spice.profitmandi.dao.repository.dtr.RetailerRepository;
59
import com.spice.profitmandi.dao.repository.dtr.RetailerRepository;
-
 
60
import com.spice.profitmandi.dao.repository.fofo.ActivatedImeiRepository;
54
import com.spice.profitmandi.dao.repository.fofo.FofoLineItemRepository;
61
import com.spice.profitmandi.dao.repository.fofo.FofoLineItemRepository;
55
import com.spice.profitmandi.dao.repository.fofo.FofoOrderItemRepository;
62
import com.spice.profitmandi.dao.repository.fofo.FofoOrderItemRepository;
56
import com.spice.profitmandi.dao.repository.fofo.FofoOrderRepository;
63
import com.spice.profitmandi.dao.repository.fofo.FofoOrderRepository;
57
import com.spice.profitmandi.dao.repository.fofo.InventoryItemRepository;
64
import com.spice.profitmandi.dao.repository.fofo.InventoryItemRepository;
58
import com.spice.profitmandi.dao.repository.fofo.PartnerTypeChangeService;
65
import com.spice.profitmandi.dao.repository.fofo.PartnerTypeChangeService;
Line 75... Line 82...
75
	@Autowired
82
	@Autowired
76
	@Qualifier("fofoInventoryItemRepository")
83
	@Qualifier("fofoInventoryItemRepository")
77
	private InventoryItemRepository inventoryItemRepository;
84
	private InventoryItemRepository inventoryItemRepository;
78
 
85
 
79
	@Autowired
86
	@Autowired
-
 
87
	private ActivatedImeiRepository activatedImeiRepository;
-
 
88
	
-
 
89
	@Autowired
80
	private PartnerTypeChangeService partnerTypeChangeService;
90
	private PartnerTypeChangeService partnerTypeChangeService;
81
 
91
 
82
	@Autowired
92
	@Autowired
83
	private PurchaseService purchaseService;
93
	private PurchaseService purchaseService;
84
 
94
 
Line 883... Line 893...
883
		}
893
		}
884
 
894
 
885
		return session.createQuery(query).getSingleResult();
895
		return session.createQuery(query).getSingleResult();
886
 
896
 
887
	}
897
	}
-
 
898
	
-
 
899
	@Override
-
 
900
	public void processActivation() throws ProfitMandiBusinessException {
-
 
901
		List<SchemeInOut> pendingPayouts = schemeInOutRepository.selectAllPending();
-
 
902
		List<Integer> schemeIds = new ArrayList<>();
-
 
903
		Set<Integer> inventoryIds = new HashSet<>();
-
 
904
		for (SchemeInOut pendingPayout: pendingPayouts) {
-
 
905
			schemeIds.add(pendingPayout.getSchemeId());
-
 
906
			inventoryIds.add(pendingPayout.getInventoryItemId());
-
 
907
		}
-
 
908
		Map<Integer, InventoryItem> inventoryItemMap = inventoryItemRepository.selectByIds(inventoryIds).stream().collect(Collectors.toMap(x->x.getId(), x->x));
-
 
909
		Map<String, InventoryItem> serialNumberMap = inventoryItemMap.values().stream(). collect(Collectors.toMap(x->x.getSerialNumber(), x->x));
-
 
910
		
-
 
911
		Map<Integer, Scheme> schemesMap = schemeRepository.selectBySchemeIds(schemeIds, 0, 0).stream().collect(Collectors.toMap(x->x.getId(), x->x));
-
 
912
		List<ActivatedImei> activatedImeis = activatedImeiRepository.selectBySerialNumbers(new ArrayList<>(serialNumberMap.keySet()));
-
 
913
		
-
 
914
		Map<String, ActivatedImei> activatedImeiMap = activatedImeis.stream().collect(Collectors.toMap(x->x.getSerialNumber(), x->x));
-
 
915
		for(SchemeInOut pendingPayout : pendingPayouts) {
-
 
916
			InventoryItem ii = inventoryItemMap.get(pendingPayout.getInventoryItemId());
-
 
917
			String serialNumber = ii.getSerialNumber();
-
 
918
			ActivatedImei activatedImei = activatedImeiMap.get(serialNumber);
-
 
919
			if(activatedImei == null) {
-
 
920
				continue;
-
 
921
			}
-
 
922
			Scheme scheme = schemesMap.get(pendingPayout.getSchemeId());
-
 
923
			if(activatedImei.getActivationTimestamp().isBefore(scheme.getEndDateTime()) 
-
 
924
				&& activatedImei.getActivationTimestamp().isAfter(scheme.getStartDateTime())) {
-
 
925
				int fofoId = ii.getFofoId();
-
 
926
				//Get latest order Id
-
 
927
				int orderId = scanRecordRepository.selectByInventoryItemId(ii.getId()).stream().filter(x->x.getOrderId() > 0).
-
 
928
				sorted(Comparator.comparing(ScanRecord::getCreateTimestamp).reversed()).findFirst().get().getOrderId();
-
 
929
				FofoOrder fofoOrder = fofoOrderRepository.selectByOrderId(orderId);
-
 
930
				walletService.addAmountToWallet(fofoId, orderId, WalletReferenceType.ACTIVATION_SCHEME, "Activation margin for Imei#" + serialNumber, 
-
 
931
						pendingPayout.getAmount(), fofoOrder.getCreateTimestamp());
-
 
932
				pendingPayout.setCreditTimestamp(LocalDateTime.now());
-
 
933
				pendingPayout.setStatus(SchemePayoutStatus.CREDITED);
-
 
934
				pendingPayout.setStatusDescription("Activation margin credited");
-
 
935
			} else {
-
 
936
				pendingPayout.setStatus(SchemePayoutStatus.REJECTED);
-
 
937
				pendingPayout.setStatusDescription("Rejected, activated on " + FormattingUtils.formatDate(activatedImei.getActivationTimestamp()));
-
 
938
			}
-
 
939
		}
-
 
940
	}
888
 
941
 
889
}
942
}