Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
23755 amit.gupta 1
package com.smartdukaan.cron.migrations;
2
 
23824 amit.gupta 3
import java.time.LocalDate;
23755 amit.gupta 4
import java.time.LocalDateTime;
23824 amit.gupta 5
import java.time.LocalTime;
23755 amit.gupta 6
import java.util.Arrays;
23827 amit.gupta 7
import java.util.Collections;
24002 amit.gupta 8
import java.util.HashMap;
24005 amit.gupta 9
import java.util.HashSet;
23755 amit.gupta 10
import java.util.List;
24002 amit.gupta 11
import java.util.Map;
24641 amit.gupta 12
import java.util.stream.Collectors;
23755 amit.gupta 13
 
14
import org.apache.commons.lang.StringUtils;
15
import org.apache.logging.log4j.LogManager;
16
import org.apache.logging.log4j.Logger;
17
import org.springframework.beans.factory.annotation.Autowired;
18
import org.springframework.stereotype.Component;
19
import org.springframework.transaction.annotation.Transactional;
20
 
24005 amit.gupta 21
import com.spice.profitmandi.dao.entity.fofo.InventoryItem;
23898 amit.gupta 22
import com.spice.profitmandi.dao.entity.fofo.Purchase;
23824 amit.gupta 23
import com.spice.profitmandi.dao.entity.transaction.LineItem;
23755 amit.gupta 24
import com.spice.profitmandi.dao.entity.transaction.LineItemImei;
25
import com.spice.profitmandi.dao.entity.transaction.Order;
23899 amit.gupta 26
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
24002 amit.gupta 27
import com.spice.profitmandi.dao.repository.fofo.DebitNoteRepository;
28
import com.spice.profitmandi.dao.repository.fofo.InventoryItemRepository;
23898 amit.gupta 29
import com.spice.profitmandi.dao.repository.fofo.PurchaseRepository;
24002 amit.gupta 30
import com.spice.profitmandi.dao.repository.fofo.SchemeInOutRepository;
23755 amit.gupta 31
import com.spice.profitmandi.dao.repository.transaction.LineItemImeisRepository;
23824 amit.gupta 32
import com.spice.profitmandi.dao.repository.transaction.LineItemRepository;
23755 amit.gupta 33
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
24002 amit.gupta 34
import com.spice.profitmandi.dao.repository.user.UserRepository;
23899 amit.gupta 35
import com.spice.profitmandi.service.inventory.InventoryService;
24706 amit.gupta 36
import com.spice.profitmandi.service.inventory.PurchaseService;
24266 amit.gupta 37
import com.spice.profitmandi.service.order.OrderService;
24005 amit.gupta 38
import com.spice.profitmandi.service.pricing.PriceDropService;
39
import com.spice.profitmandi.service.scheme.SchemeService;
23899 amit.gupta 40
import com.spice.profitmandi.service.transaction.TransactionService;
41
import com.spice.profitmandi.service.user.RetailerService;
42
import com.spice.profitmandi.service.wallet.WalletService;
23755 amit.gupta 43
 
24002 amit.gupta 44
import in.shop2020.model.v1.order.WalletReferenceType;
45
 
23755 amit.gupta 46
@Component
47
@Transactional(rollbackFor = Throwable.class)
48
public class RunOnceTasks {
49
 
50
	private static final Logger LOGGER = LogManager.getLogger(RunOnceTasks.class);
51
 
52
	@Autowired
23824 amit.gupta 53
	private LineItemRepository lineItemRepository;
24711 amit.gupta 54
 
23905 amit.gupta 55
	@Autowired
24002 amit.gupta 56
	private UserRepository userRepository;
24711 amit.gupta 57
 
24002 amit.gupta 58
	@Autowired
23899 amit.gupta 59
	private WalletService walletService;
60
 
61
	@Autowired
62
	private InventoryService inventoryService;
63
 
64
	@Autowired
65
	private TransactionService transactionService;
66
 
67
	@Autowired
23755 amit.gupta 68
	private OrderRepository orderRepository;
24711 amit.gupta 69
 
70
	// Service for Tertiary/Partner Orders
24266 amit.gupta 71
	@Autowired
72
	private OrderService orderService;
23767 amit.gupta 73
 
23755 amit.gupta 74
	@Autowired
23899 amit.gupta 75
	private FofoStoreRepository fofoStoreRepository;
76
 
77
	@Autowired
23755 amit.gupta 78
	private LineItemImeisRepository lineItemImeisRepository;
24711 amit.gupta 79
 
24002 amit.gupta 80
	@Autowired
81
	private InventoryItemRepository inventoryItemRepository;
23901 amit.gupta 82
 
23898 amit.gupta 83
	@Autowired
23899 amit.gupta 84
	private RetailerService retailerService;
24711 amit.gupta 85
 
24002 amit.gupta 86
	@Autowired
87
	private SchemeInOutRepository schemeInOutRepository;
24711 amit.gupta 88
 
24002 amit.gupta 89
	@Autowired
90
	private DebitNoteRepository debitNoteRepository;
23899 amit.gupta 91
 
92
	@Autowired
23898 amit.gupta 93
	private PurchaseRepository purchaseRepository;
24711 amit.gupta 94
 
24005 amit.gupta 95
	@Autowired
96
	private PriceDropService priceDropService;
24711 amit.gupta 97
 
24005 amit.gupta 98
	@Autowired
99
	private SchemeService schemeService;
24711 amit.gupta 100
 
24005 amit.gupta 101
	public void dropCorrection() throws Exception {
102
 
24711 amit.gupta 103
		walletService.rollbackAmountFromWallet(175128034, 274, 4, WalletReferenceType.PRICE_DROP,
104
				"Scheme  differential for Price Drop of Rs.712 on Samsung J6 J600GG, on 01-08-2018 for missing 1pc");
105
		walletService.rollbackAmountFromWallet(175128034, -259, 4, WalletReferenceType.PRICE_DROP,
106
				"Scheme  differential for Price Drop of Rs.712 on Samsung J6 J600GG, on 01-08-2018 for missing 1pc");
107
		List<InventoryItem> iis = inventoryItemRepository.selectByIds(new HashSet<>(Arrays.asList(3518, 3516)));
108
		schemeService.reverseSchemes(iis, 8,
109
				"Scheme  differential for Price Drop of Rs.712 on Samsung J6 J600GG, on 01-08-2018. Total 2 item(s)");
110
		List<InventoryItem> iis1 = inventoryItemRepository.selectByIds(new HashSet<>(Arrays.asList(3502, 3334, 3503)));
111
		schemeService.reverseSchemes(iis1, 13,
112
				"Scheme  differential for Price Drop of Rs.485 on Samsung Galaxy J4 J400FD, on 18-07-2018. Total 3 item(s)");
113
 
114
		List<InventoryItem> iis2 = inventoryItemRepository.selectByIds(new HashSet<>(Arrays.asList(3319)));
115
		schemeService.reverseSchemes(iis2, 13,
116
				"Scheme  differential for Price Drop of Rs.485 on Samsung Galaxy J4 J400FD, on 18-07-2018. Total 1 item(s)");
24005 amit.gupta 117
	}
24711 amit.gupta 118
 
24002 amit.gupta 119
	public void schemeRollback() {
120
		Map<Integer, Float> fofoIdAmount = new HashMap<>();
24003 amit.gupta 121
		fofoIdAmount.put(175135218, 1942f);
122
		String description = "Price drop/differential rolled out as, they were already returned, Total 2pcs.";
24711 amit.gupta 123
		for (Map.Entry<Integer, Float> fofoIdAmountEntry : fofoIdAmount.entrySet()) {
124
			Integer fofoId = fofoIdAmountEntry.getKey();
24002 amit.gupta 125
			Float amount = fofoIdAmountEntry.getValue();
24003 amit.gupta 126
			walletService.rollbackAmountFromWallet(fofoId, amount, 4, WalletReferenceType.PRICE_DROP, description);
24002 amit.gupta 127
		}
24004 amit.gupta 128
		fofoIdAmount.put(175135218, 438f);
24711 amit.gupta 129
		for (Map.Entry<Integer, Float> fofoIdAmountEntry : fofoIdAmount.entrySet()) {
130
			Integer fofoId = fofoIdAmountEntry.getKey();
24004 amit.gupta 131
			Float amount = fofoIdAmountEntry.getValue();
132
			walletService.rollbackAmountFromWallet(fofoId, amount, 4, WalletReferenceType.PRICE_DROP, description);
133
		}
24002 amit.gupta 134
	}
23755 amit.gupta 135
 
23898 amit.gupta 136
	public void populateGrnTimestamp() {
137
		List<Purchase> allPurchases = purchaseRepository.selectAll();
23899 amit.gupta 138
		for (Purchase p : allPurchases) {
23898 amit.gupta 139
			String invoiceNumber = p.getPurchaseReference();
23899 amit.gupta 140
			if (p.getCompleteTimestamp() == null) {
23898 amit.gupta 141
				LOGGER.info("GRN for invoice {} is delivered but partially Completed.", p.getPurchaseReference());
142
			} else {
143
				List<Order> orders = orderRepository.selectByAirwayBillOrInvoiceNumber(invoiceNumber, p.getFofoId());
23899 amit.gupta 144
				for (Order order : orders) {
23902 amit.gupta 145
					if (order.getPartnerGrnTimestamp() == null) {
146
						order.setPartnerGrnTimestamp(p.getCompleteTimestamp());
23898 amit.gupta 147
						orderRepository.persist(order);
148
					}
149
				}
150
			}
151
		}
23899 amit.gupta 152
 
23898 amit.gupta 153
	}
23899 amit.gupta 154
 
23755 amit.gupta 155
	public void migarateLineItemsToNewTable() {
156
		LOGGER.info("Before Migrated LineItems Successfully");
23824 amit.gupta 157
		int lineItemImeiId = 0;
158
		LocalDateTime startDate = null;
159
		try {
160
			lineItemImeiId = lineItemImeisRepository.selectMaxId();
23899 amit.gupta 161
			LineItem lineItem = lineItemRepository
162
					.selectById(lineItemImeisRepository.selectById(lineItemImeiId).getLineItemId());
23824 amit.gupta 163
			Order order = orderRepository.selectById(lineItem.getOrderId());
164
			startDate = order.getBillingTimestamp();
165
		} catch (Exception e) {
166
			LOGGER.info("Running before first time");
23826 amit.gupta 167
			startDate = LocalDateTime.of(LocalDate.of(2017, 7, 1), LocalTime.MIDNIGHT);
23824 amit.gupta 168
		}
169
		List<Order> orders = orderRepository.selectAllByBillingDatesBetween(startDate, LocalDateTime.now());
23827 amit.gupta 170
		Collections.reverse(orders);
23899 amit.gupta 171
 
23755 amit.gupta 172
		for (Order order : orders) {
23824 amit.gupta 173
			try {
23767 amit.gupta 174
				String serialNumbers = order.getLineItem().getSerialNumber();
175
				if (!StringUtils.isEmpty(serialNumbers)) {
176
					List<String> serialNumberList = Arrays.asList(serialNumbers.split(","));
177
					for (String serialNumber : serialNumberList) {
178
						int lineItemId = order.getLineItem().getId();
179
						LineItemImei lineItemImei = new LineItemImei();
180
						lineItemImei.setSerialNumber(serialNumber);
181
						lineItemImei.setLineItemId(lineItemId);
182
						lineItemImeisRepository.persist(lineItemImei);
183
					}
184
				} else {
185
					LOGGER.info("Serial Numbers dont exist for Order {}", order.getId());
23755 amit.gupta 186
				}
23824 amit.gupta 187
			} catch (Exception e) {
23899 amit.gupta 188
				LOGGER.info("Error occurred while creating lineitem imei {}, because of {}", order.getId(),
189
						e.getMessage());
23755 amit.gupta 190
			}
191
		}
192
		LOGGER.info("Migrated LineItems Successfully");
193
	}
24266 amit.gupta 194
 
195
	public void cancelOrder(List<String> invoiceNumbers) throws Exception {
196
		orderService.cancelOrder(invoiceNumbers);
197
	}
24711 amit.gupta 198
 
24641 amit.gupta 199
	public void migratePurchase() {
200
		List<Purchase> purchases = purchaseRepository.selectPurchaseAllPurchasesLessThanZero();
24706 amit.gupta 201
		System.out.printf("Total Purchases count is %s", purchases.size());
24711 amit.gupta 202
		for (Purchase purchase : purchases) {
203
			List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(purchase.getId());
204
			Map<Integer, List<InventoryItem>> itemIdInventoryMap = inventoryItems.stream()
205
					.collect(Collectors.groupingBy(InventoryItem::getItemId));
206
			List<Order> orders = orderRepository.selectByAirwayBillOrInvoiceNumber(purchase.getPurchaseReference(),
207
					purchase.getFofoId());
208
			Map<Integer, Integer> ourSaleItemQtyMap = orders.stream().collect(Collectors.groupingBy(
209
					x -> x.getLineItem().getItemId(), Collectors.summingInt(x -> x.getLineItem().getQuantity())));
210
			Map<Integer, Integer> theirPurchaseItemQtyMap = inventoryItems.stream().collect(Collectors
211
					.groupingBy(InventoryItem::getItemId, Collectors.summingInt(InventoryItem::getInitialQuantity)));
24709 amit.gupta 212
			for (Map.Entry<Integer, Integer> itemQtyEntry : theirPurchaseItemQtyMap.entrySet()) {
24711 amit.gupta 213
				if (!ourSaleItemQtyMap.containsKey(itemQtyEntry.getKey())) {
214
					LOGGER.info("Cannot find in Invoice {} item {}", purchase.getPurchaseReference(),
215
							itemQtyEntry.getKey());
24646 amit.gupta 216
					continue;
24645 amit.gupta 217
				}
24709 amit.gupta 218
				int ourSale = ourSaleItemQtyMap.get(itemQtyEntry.getKey());
24713 amit.gupta 219
				int quantityToReduce = itemQtyEntry.getValue() - ourSale;
220
				if (quantityToReduce > 0) {
24710 amit.gupta 221
					List<InventoryItem> itemIis = itemIdInventoryMap.get(itemQtyEntry.getKey());
24711 amit.gupta 222
					if (itemIdInventoryMap != null) {
223
						for (InventoryItem ii : itemIis) {
224
							if (ii.getGoodQuantity() >= quantityToReduce
24712 amit.gupta 225
									&& ii.getInitialQuantity() >= quantityToReduce) {
24714 amit.gupta 226
								LOGGER.info("Changed in inventoryItems ", purchase.getPurchaseReference(),
227
										ii.getId(), ii.getItemId(), ii.getInitialQuantity(), ii.getGoodQuantity(), ii.getBadQuantity(), quantityToReduce);
24711 amit.gupta 228
							}
24641 amit.gupta 229
						}
230
					}
231
				}
232
			}
233
		}
234
	}
23755 amit.gupta 235
}