Subversion Repositories SmartDukaan

Rev

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

Rev 23762 Rev 23929
Line 1... Line 1...
1
package com.smartdukaan.cron.scheduled;
1
package com.smartdukaan.cron.scheduled;
2
 
2
 
-
 
3
import java.io.PrintStream;
3
import java.sql.Timestamp;
4
import java.sql.Timestamp;
4
import java.time.LocalDate;
5
import java.time.LocalDate;
5
import java.time.LocalDateTime;
6
import java.time.LocalDateTime;
6
import java.time.temporal.ChronoUnit;
7
import java.time.temporal.ChronoUnit;
7
import java.util.ArrayList;
8
import java.util.ArrayList;
Line 9... Line 10...
9
import java.util.HashMap;
10
import java.util.HashMap;
10
import java.util.List;
11
import java.util.List;
11
import java.util.Map;
12
import java.util.Map;
12
import java.util.stream.Collectors;
13
import java.util.stream.Collectors;
13
 
14
 
-
 
15
import org.apache.commons.csv.CSVFormat;
-
 
16
import org.apache.commons.csv.CSVPrinter;
-
 
17
import org.apache.commons.io.output.ByteArrayOutputStream;
14
import org.apache.logging.log4j.LogManager;
18
import org.apache.logging.log4j.LogManager;
15
import org.apache.logging.log4j.Logger;
19
import org.apache.logging.log4j.Logger;
16
import org.springframework.beans.factory.annotation.Autowired;
20
import org.springframework.beans.factory.annotation.Autowired;
17
import org.springframework.beans.factory.annotation.Value;
21
import org.springframework.beans.factory.annotation.Value;
-
 
22
import org.springframework.core.io.ByteArrayResource;
-
 
23
import org.springframework.mail.javamail.JavaMailSender;
18
import org.springframework.stereotype.Component;
24
import org.springframework.stereotype.Component;
19
import org.springframework.transaction.annotation.Transactional;
25
import org.springframework.transaction.annotation.Transactional;
20
 
26
 
21
import com.spice.profitmandi.common.enumuration.RechargeStatus;
27
import com.spice.profitmandi.common.enumuration.RechargeStatus;
-
 
28
import com.spice.profitmandi.common.model.CustomRetailer;
22
import com.spice.profitmandi.common.model.RechargeCredential;
29
import com.spice.profitmandi.common.model.RechargeCredential;
-
 
30
import com.spice.profitmandi.common.util.FormattingUtils;
-
 
31
import com.spice.profitmandi.common.util.Utils;
23
import com.spice.profitmandi.dao.entity.dtr.DailyRecharge;
32
import com.spice.profitmandi.dao.entity.dtr.DailyRecharge;
24
import com.spice.profitmandi.dao.entity.dtr.RechargeProvider;
33
import com.spice.profitmandi.dao.entity.dtr.RechargeProvider;
25
import com.spice.profitmandi.dao.entity.dtr.RechargeProviderCreditWalletHistory;
34
import com.spice.profitmandi.dao.entity.dtr.RechargeProviderCreditWalletHistory;
26
import com.spice.profitmandi.dao.entity.dtr.RechargeTransaction;
35
import com.spice.profitmandi.dao.entity.dtr.RechargeTransaction;
27
import com.spice.profitmandi.dao.entity.fofo.FofoOrder;
36
import com.spice.profitmandi.dao.entity.fofo.FofoOrder;
-
 
37
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
28
import com.spice.profitmandi.dao.entity.fofo.Purchase;
38
import com.spice.profitmandi.dao.entity.fofo.Purchase;
-
 
39
import com.spice.profitmandi.dao.entity.transaction.Order;
29
import com.spice.profitmandi.dao.repository.dtr.DailyRechargeRepository;
40
import com.spice.profitmandi.dao.repository.dtr.DailyRechargeRepository;
-
 
41
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
30
import com.spice.profitmandi.dao.repository.dtr.RechargeProviderCreditWalletHistoryRepository;
42
import com.spice.profitmandi.dao.repository.dtr.RechargeProviderCreditWalletHistoryRepository;
31
import com.spice.profitmandi.dao.repository.dtr.RechargeProviderRepository;
43
import com.spice.profitmandi.dao.repository.dtr.RechargeProviderRepository;
32
import com.spice.profitmandi.dao.repository.dtr.RechargeTransactionRepository;
44
import com.spice.profitmandi.dao.repository.dtr.RechargeTransactionRepository;
33
import com.spice.profitmandi.dao.repository.fofo.FofoOrderRepository;
45
import com.spice.profitmandi.dao.repository.fofo.FofoOrderRepository;
34
import com.spice.profitmandi.dao.repository.fofo.PurchaseRepository;
46
import com.spice.profitmandi.dao.repository.fofo.PurchaseRepository;
-
 
47
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
-
 
48
import com.spice.profitmandi.service.inventory.InventoryService;
35
import com.spice.profitmandi.service.recharge.provider.OxigenRechargeProviderService;
49
import com.spice.profitmandi.service.recharge.provider.OxigenRechargeProviderService;
36
import com.spice.profitmandi.service.recharge.provider.ThinkWalnutDigitalRechargeProviderService;
50
import com.spice.profitmandi.service.recharge.provider.ThinkWalnutDigitalRechargeProviderService;
37
import com.spice.profitmandi.service.scheme.SchemeService;
51
import com.spice.profitmandi.service.scheme.SchemeService;
-
 
52
import com.spice.profitmandi.service.transaction.TransactionService;
-
 
53
import com.spice.profitmandi.service.user.RetailerService;
38
import com.spice.profitmandi.service.wallet.WalletService;
54
import com.spice.profitmandi.service.wallet.WalletService;
39
 
55
 
40
import in.shop2020.model.v1.order.WalletReferenceType;
56
import in.shop2020.model.v1.order.WalletReferenceType;
41
 
57
 
42
@Component
58
@Component
Line 91... Line 107...
91
	@Autowired
107
	@Autowired
92
	private RechargeProviderCreditWalletHistoryRepository rechargeProviderCreditWalletHistoryRepository;
108
	private RechargeProviderCreditWalletHistoryRepository rechargeProviderCreditWalletHistoryRepository;
93
 
109
 
94
	@Autowired
110
	@Autowired
95
	private FofoOrderRepository fofoOrderRepository;
111
	private FofoOrderRepository fofoOrderRepository;
96
	
112
 
97
	@Autowired
113
	@Autowired
98
	private WalletService walletService;
114
	private WalletService walletService;
99
 
115
 
100
	@Autowired
116
	@Autowired
101
	private ThinkWalnutDigitalRechargeProviderService thinkWalnutDigitalRechargeProviderService;
117
	private ThinkWalnutDigitalRechargeProviderService thinkWalnutDigitalRechargeProviderService;
Line 107... Line 123...
107
	private RechargeProviderRepository rechargeProviderRepository;
123
	private RechargeProviderRepository rechargeProviderRepository;
108
 
124
 
109
	@Autowired
125
	@Autowired
110
	private DailyRechargeRepository dailyRechargeRepository;
126
	private DailyRechargeRepository dailyRechargeRepository;
111
 
127
 
-
 
128
	@Autowired
-
 
129
	private FofoStoreRepository fofoStoreRepository;
-
 
130
 
112
	@Value("${prod}")
131
	@Value("${prod}")
113
	private boolean prod;
132
	private boolean prod;
114
 
133
 
-
 
134
	@Autowired
-
 
135
	private RetailerService retailerService;
-
 
136
 
-
 
137
	@Autowired
115
	private static final Logger LOGGER = LogManager.getLogger(ScheduledTasks.class);
138
	private TransactionService transactionService;
-
 
139
 
-
 
140
	@Autowired
-
 
141
	private OrderRepository orderRepository;
-
 
142
 
-
 
143
	@Autowired
-
 
144
	private JavaMailSender mailSender;
-
 
145
 
-
 
146
	@Autowired
-
 
147
	private InventoryService inventoryService;
116
 
148
 
-
 
149
	private static final Logger LOGGER = LogManager.getLogger(ScheduledTasks.class);
117
 
150
 
118
	public void generateDailyRecharge() {
151
	public void generateDailyRecharge() {
119
		List<RechargeProviderCreditWalletHistory> allCreditHistory = rechargeProviderCreditWalletHistoryRepository
152
		List<RechargeProviderCreditWalletHistory> allCreditHistory = rechargeProviderCreditWalletHistoryRepository
120
				.selectAll(0, 2000);
153
				.selectAll(0, 2000);
121
		List<RechargeProvider> rechargeProviders = rechargeProviderRepository.selectAll();
154
		List<RechargeProvider> rechargeProviders = rechargeProviderRepository.selectAll();
Line 243... Line 276...
243
				LOGGER.error("Error while processing sale order {} for scheme Out", fofoOrder.getId());
276
				LOGGER.error("Error while processing sale order {} for scheme Out", fofoOrder.getId());
244
			}
277
			}
245
		}
278
		}
246
		LOGGER.info("Schemes process successfully.");
279
		LOGGER.info("Schemes process successfully.");
247
	}
280
	}
248
	
281
 
249
	public void processRechargeCashback() throws Throwable {
282
	public void processRechargeCashback() throws Throwable {
250
		LocalDateTime cashbackTime = LocalDateTime.now();
283
		LocalDateTime cashbackTime = LocalDateTime.now();
251
		int referenceId = (int)Timestamp.valueOf(cashbackTime).getTime()/1000;
284
		int referenceId = (int) Timestamp.valueOf(cashbackTime).getTime() / 1000;
252
		List<RechargeTransaction> pendingTransactions = rechargeTransactionRepository.getPendingCashBackRehargeTransactions();
285
		List<RechargeTransaction> pendingTransactions = rechargeTransactionRepository
-
 
286
				.getPendingCashBackRehargeTransactions();
-
 
287
		Map<Object, Double> totalRetailerCashbacks = pendingTransactions.stream().collect(
253
		Map<Object, Double> totalRetailerCashbacks = pendingTransactions.stream().collect(Collectors.groupingBy(x->x.getRetailerId(), Collectors.summingDouble(x->x.getCommission())));
288
				Collectors.groupingBy(x -> x.getRetailerId(), Collectors.summingDouble(x -> x.getCommission())));
254
		for (Map.Entry<Object, Double>totalRetailerCashback : totalRetailerCashbacks.entrySet()) {
289
		for (Map.Entry<Object, Double> totalRetailerCashback : totalRetailerCashbacks.entrySet()) {
255
			int retailerId = (Integer)totalRetailerCashback.getKey();
290
			int retailerId = (Integer) totalRetailerCashback.getKey();
256
			float amount = totalRetailerCashback.getValue().floatValue();
291
			float amount = totalRetailerCashback.getValue().floatValue();
257
			if(Math.round(amount) > 0) {
292
			if (Math.round(amount) > 0) {
258
				walletService.addAmountToWallet(retailerId, referenceId, WalletReferenceType.CASHBACK, "Recharge Cashback", Math.round(amount));
293
				walletService.addAmountToWallet(retailerId, referenceId, WalletReferenceType.CASHBACK,
-
 
294
						"Recharge Cashback", Math.round(amount));
259
			}
295
			}
260
		}
296
		}
261
		for(RechargeTransaction rt : pendingTransactions) {
297
		for (RechargeTransaction rt : pendingTransactions) {
262
			rt.setCashbackTimestamp(cashbackTime);
298
			rt.setCashbackTimestamp(cashbackTime);
263
			rt.setCashbackReference(referenceId);
299
			rt.setCashbackReference(referenceId);
264
			rechargeTransactionRepository.persist(rt);
300
			rechargeTransactionRepository.persist(rt);
265
		}
301
		}
266
		LOGGER.info("Cashbacks for Recharge processed Successfully");
302
		LOGGER.info("Cashbacks for Recharge processed Successfully");
267
	}
303
	}
268
 
304
 
-
 
305
	public void sendPartnerInvestmentDetails() throws Exception {
-
 
306
		String fileName = "/tmp/InvestmentSummary-" + FormattingUtils.formatDate(LocalDateTime.now()) + ".csv";
-
 
307
 
-
 
308
		List<FofoStore> fofoStores = fofoStoreRepository.selectAll();
-
 
309
		Map<Integer, CustomRetailer> customRetailerMap = retailerService
-
 
310
				.getFofoRetailers(fofoStores.stream().map(x -> x.getId()).collect(Collectors.toList()));
-
 
311
		try (
-
 
312
				ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
 
313
				PrintStream writer = new PrintStream(baos);
-
 
314
				CSVPrinter csvPrinter = new CSVPrinter(writer,
-
 
315
						CSVFormat.EXCEL.withTrim().withHeader("Code", "StoreName", "Email", "Mobile", "WalletAmount",
-
 
316
								"InStockAmount", "UnbilledStockAmount", "GrnPendingStockAmount", "MinimumInvestment",
-
 
317
								"TotalInvested", "ShortAmount"));) {
-
 
318
			for (FofoStore fofoStore : fofoStores) {
-
 
319
 
-
 
320
				CustomRetailer retailer = customRetailerMap.get(fofoStore.getId());
-
 
321
				float walletAmount = walletService.getUserWallet(fofoStore.getId()).getAmount();
-
 
322
				float inStockAmount = inventoryService.getTotalAmountInStock(fofoStore.getId());
-
 
323
 
-
 
324
				float unbilledStockAmount = 0;
-
 
325
				List<Order> unbilledOrders = transactionService.getInTransitOrders(fofoStore.getId());
-
 
326
				for (Order unBilledOrder : unbilledOrders) {
-
 
327
					unbilledStockAmount += unBilledOrder.getTotalAmount();
-
 
328
				}
-
 
329
 
-
 
330
				float grnPendingStockAmount = 0;
-
 
331
				List<Order> grnPendingOrders = orderRepository.selectPendingGrnOrders(fofoStore.getId());
-
 
332
				for (Order grnPendingOrder : grnPendingOrders) {
-
 
333
					LOGGER.info("Grn pending for Order {} and partner {}", grnPendingOrder.getId(),
-
 
334
							grnPendingOrder.getRetailerEmailId());
-
 
335
					grnPendingStockAmount += grnPendingOrder.getTotalAmount();
-
 
336
				}
-
 
337
				float totalInvestedAmount = walletAmount + inStockAmount + unbilledStockAmount + grnPendingStockAmount;
-
 
338
				csvPrinter.printRecord(fofoStore.getCode(), fofoStore.getCode(), retailer.getBusinessName(),
-
 
339
						retailer.getEmail(), retailer.getMobileNumber(), fofoStore.getMinimumInvestment(), walletAmount,
-
 
340
						inStockAmount, unbilledStockAmount, grnPendingStockAmount, totalInvestedAmount,
-
 
341
						fofoStore.getMinimumInvestment() - totalInvestedAmount);
-
 
342
			}
-
 
343
			Utils.sendMailWithAttachment(mailSender, "kamini.sharma@smartdukaan.com",
-
 
344
					new String[] { "amandeep.singh@smartdukaan.com", "tarun.verma@smartdukaan.com" },
-
 
345
					"Partner Investment Summary", "PFA", fileName, new ByteArrayResource(baos.toByteArray()));
-
 
346
 
-
 
347
		}
-
 
348
	}
-
 
349
 
269
}
350
}