Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
23724 amit.gupta 1
package com.smartdukaan.cron.scheduled;
23723 amit.gupta 2
 
24121 govind 3
import java.io.IOException;
24807 amit.gupta 4
import java.io.Serializable;
23739 amit.gupta 5
import java.sql.Timestamp;
23724 amit.gupta 6
import java.time.LocalDate;
7
import java.time.LocalDateTime;
24256 amit.gupta 8
import java.time.LocalTime;
24653 govind 9
import java.time.ZoneOffset;
10
import java.time.format.DateTimeFormatter;
23724 amit.gupta 11
import java.time.temporal.ChronoUnit;
12
import java.util.ArrayList;
13
import java.util.Arrays;
24627 amit.gupta 14
import java.util.Collections;
23723 amit.gupta 15
import java.util.HashMap;
24241 amit.gupta 16
import java.util.HashSet;
23724 amit.gupta 17
import java.util.List;
23723 amit.gupta 18
import java.util.Map;
24242 amit.gupta 19
import java.util.Optional;
24542 amit.gupta 20
import java.util.Set;
23724 amit.gupta 21
import java.util.stream.Collectors;
23723 amit.gupta 22
 
24121 govind 23
import javax.mail.MessagingException;
24
import javax.mail.internet.InternetAddress;
25
import javax.mail.internet.MimeMessage;
26
 
23929 amit.gupta 27
import org.apache.commons.io.output.ByteArrayOutputStream;
25300 tejbeer 28
import org.apache.http.client.methods.CloseableHttpResponse;
29
import org.apache.http.client.methods.HttpPost;
30
import org.apache.http.entity.StringEntity;
31
import org.apache.http.impl.client.CloseableHttpClient;
32
import org.apache.http.impl.client.HttpClients;
23755 amit.gupta 33
import org.apache.logging.log4j.LogManager;
34
import org.apache.logging.log4j.Logger;
25300 tejbeer 35
import org.json.JSONObject;
23723 amit.gupta 36
import org.springframework.beans.factory.annotation.Autowired;
23933 amit.gupta 37
import org.springframework.beans.factory.annotation.Qualifier;
23724 amit.gupta 38
import org.springframework.beans.factory.annotation.Value;
23929 amit.gupta 39
import org.springframework.core.io.ByteArrayResource;
24692 amit.gupta 40
import org.springframework.core.io.InputStreamSource;
23929 amit.gupta 41
import org.springframework.mail.javamail.JavaMailSender;
24121 govind 42
import org.springframework.mail.javamail.MimeMessageHelper;
23723 amit.gupta 43
import org.springframework.stereotype.Component;
23724 amit.gupta 44
import org.springframework.transaction.annotation.Transactional;
23723 amit.gupta 45
 
24542 amit.gupta 46
import com.google.common.collect.Lists;
25300 tejbeer 47
import com.google.gson.Gson;
48
import com.google.gson.GsonBuilder;
23724 amit.gupta 49
import com.spice.profitmandi.common.enumuration.RechargeStatus;
24681 amit.gupta 50
import com.spice.profitmandi.common.enumuration.ReporticoProject;
24121 govind 51
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
23929 amit.gupta 52
import com.spice.profitmandi.common.model.CustomRetailer;
24542 amit.gupta 53
import com.spice.profitmandi.common.model.GstRate;
23724 amit.gupta 54
import com.spice.profitmandi.common.model.RechargeCredential;
24681 amit.gupta 55
import com.spice.profitmandi.common.services.ReporticoService;
24002 amit.gupta 56
import com.spice.profitmandi.common.util.FileUtil;
23929 amit.gupta 57
import com.spice.profitmandi.common.util.FormattingUtils;
58
import com.spice.profitmandi.common.util.Utils;
24592 amit.gupta 59
import com.spice.profitmandi.common.util.Utils.Attachment;
25300 tejbeer 60
import com.spice.profitmandi.dao.Interface.Campaign;
61
import com.spice.profitmandi.dao.convertor.LocalDateTimeJsonConverter;
24590 amit.gupta 62
import com.spice.profitmandi.dao.entity.catalog.Scheme;
23724 amit.gupta 63
import com.spice.profitmandi.dao.entity.dtr.DailyRecharge;
25300 tejbeer 64
import com.spice.profitmandi.dao.entity.dtr.NotificationCampaign;
24653 govind 65
import com.spice.profitmandi.dao.entity.dtr.NotificationCampaigns;
25300 tejbeer 66
import com.spice.profitmandi.dao.entity.dtr.PushNotifications;
23724 amit.gupta 67
import com.spice.profitmandi.dao.entity.dtr.RechargeProvider;
68
import com.spice.profitmandi.dao.entity.dtr.RechargeProviderCreditWalletHistory;
69
import com.spice.profitmandi.dao.entity.dtr.RechargeTransaction;
24542 amit.gupta 70
import com.spice.profitmandi.dao.entity.fofo.CustomerAddress;
24590 amit.gupta 71
import com.spice.profitmandi.dao.entity.fofo.FofoLineItem;
23724 amit.gupta 72
import com.spice.profitmandi.dao.entity.fofo.FofoOrder;
24542 amit.gupta 73
import com.spice.profitmandi.dao.entity.fofo.FofoOrderItem;
23929 amit.gupta 74
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
24249 amit.gupta 75
import com.spice.profitmandi.dao.entity.fofo.InventoryItem;
24277 amit.gupta 76
import com.spice.profitmandi.dao.entity.fofo.PartnerDailyInvestment;
24174 govind 77
import com.spice.profitmandi.dao.entity.fofo.PartnerTargetDetails;
23724 amit.gupta 78
import com.spice.profitmandi.dao.entity.fofo.Purchase;
24242 amit.gupta 79
import com.spice.profitmandi.dao.entity.fofo.ScanRecord;
24241 amit.gupta 80
import com.spice.profitmandi.dao.entity.fofo.SchemeInOut;
24431 amit.gupta 81
import com.spice.profitmandi.dao.entity.transaction.PriceDrop;
24587 amit.gupta 82
import com.spice.profitmandi.dao.entity.transaction.UserWallet;
24580 amit.gupta 83
import com.spice.profitmandi.dao.entity.transaction.UserWalletHistory;
24542 amit.gupta 84
import com.spice.profitmandi.dao.entity.user.Address;
25300 tejbeer 85
import com.spice.profitmandi.dao.entity.user.Device;
24250 amit.gupta 86
import com.spice.profitmandi.dao.enumuration.catalog.SchemeType;
24242 amit.gupta 87
import com.spice.profitmandi.dao.enumuration.fofo.ScanType;
25300 tejbeer 88
import com.spice.profitmandi.dao.model.SimpleCampaign;
89
import com.spice.profitmandi.dao.model.SimpleCampaignParams;
90
import com.spice.profitmandi.dao.repository.catalog.DeviceRepository;
24249 amit.gupta 91
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
24241 amit.gupta 92
import com.spice.profitmandi.dao.repository.catalog.SchemeRepository;
23724 amit.gupta 93
import com.spice.profitmandi.dao.repository.dtr.DailyRechargeRepository;
23929 amit.gupta 94
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
24653 govind 95
import com.spice.profitmandi.dao.repository.dtr.Mongo;
25300 tejbeer 96
import com.spice.profitmandi.dao.repository.dtr.NotificationCampaignRepository;
97
import com.spice.profitmandi.dao.repository.dtr.PushNotificationRepository;
23724 amit.gupta 98
import com.spice.profitmandi.dao.repository.dtr.RechargeProviderCreditWalletHistoryRepository;
99
import com.spice.profitmandi.dao.repository.dtr.RechargeProviderRepository;
100
import com.spice.profitmandi.dao.repository.dtr.RechargeTransactionRepository;
24542 amit.gupta 101
import com.spice.profitmandi.dao.repository.dtr.RetailerRegisteredAddressRepository;
24669 govind 102
import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;
24542 amit.gupta 103
import com.spice.profitmandi.dao.repository.fofo.CustomerAddressRepository;
24590 amit.gupta 104
import com.spice.profitmandi.dao.repository.fofo.FofoLineItemRepository;
24542 amit.gupta 105
import com.spice.profitmandi.dao.repository.fofo.FofoOrderItemRepository;
23724 amit.gupta 106
import com.spice.profitmandi.dao.repository.fofo.FofoOrderRepository;
24249 amit.gupta 107
import com.spice.profitmandi.dao.repository.fofo.InventoryItemRepository;
24277 amit.gupta 108
import com.spice.profitmandi.dao.repository.fofo.PartnerDailyInvestmentRepository;
24174 govind 109
import com.spice.profitmandi.dao.repository.fofo.PartnerTargetRepository;
25503 amit.gupta 110
import com.spice.profitmandi.dao.repository.fofo.PartnerTypeChangeService;
23724 amit.gupta 111
import com.spice.profitmandi.dao.repository.fofo.PurchaseRepository;
24242 amit.gupta 112
import com.spice.profitmandi.dao.repository.fofo.ScanRecordRepository;
24241 amit.gupta 113
import com.spice.profitmandi.dao.repository.fofo.SchemeInOutRepository;
23929 amit.gupta 114
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
24431 amit.gupta 115
import com.spice.profitmandi.dao.repository.transaction.PriceDropRepository;
24580 amit.gupta 116
import com.spice.profitmandi.dao.repository.transaction.UserWalletHistoryRepository;
24587 amit.gupta 117
import com.spice.profitmandi.dao.repository.transaction.UserWalletRepository;
24542 amit.gupta 118
import com.spice.profitmandi.dao.repository.user.AddressRepository;
24337 amit.gupta 119
import com.spice.profitmandi.service.PartnerInvestmentService;
23929 amit.gupta 120
import com.spice.profitmandi.service.inventory.InventoryService;
25335 amit.gupta 121
import com.spice.profitmandi.service.order.OrderService;
24431 amit.gupta 122
import com.spice.profitmandi.service.pricing.PriceDropService;
23724 amit.gupta 123
import com.spice.profitmandi.service.recharge.provider.OxigenRechargeProviderService;
124
import com.spice.profitmandi.service.recharge.provider.ThinkWalnutDigitalRechargeProviderService;
125
import com.spice.profitmandi.service.scheme.SchemeService;
24121 govind 126
import com.spice.profitmandi.service.slab.TargetSlabService;
23929 amit.gupta 127
import com.spice.profitmandi.service.transaction.TransactionService;
128
import com.spice.profitmandi.service.user.RetailerService;
23739 amit.gupta 129
import com.spice.profitmandi.service.wallet.WalletService;
23723 amit.gupta 130
 
24197 amit.gupta 131
import in.shop2020.model.v1.order.WalletReferenceType;;
23739 amit.gupta 132
 
23723 amit.gupta 133
@Component
23724 amit.gupta 134
@Transactional(rollbackFor = Throwable.class)
23723 amit.gupta 135
public class ScheduledTasks {
136
 
23724 amit.gupta 137
	@Value("${oxigen.recharge.transaction.url}")
138
	private String oxigenRechargeTransactionUrl;
23723 amit.gupta 139
 
23724 amit.gupta 140
	@Value("${oxigen.recharge.enquiry.url}")
141
	private String oxigenRechargeEnquiryUrl;
24533 govind 142
 
24431 amit.gupta 143
	@Autowired
25503 amit.gupta 144
	private PartnerTypeChangeService partnerTypeChangeService;
145
 
146
	@Autowired
24431 amit.gupta 147
	private PriceDropService priceDropService;
23723 amit.gupta 148
 
23724 amit.gupta 149
	@Value("${oxigen.recharge.auth.key}")
150
	private String oxigenRechargeAuthKey;
151
 
152
	@Value("${oxigen.recharge.validation.url}")
153
	private String oxigenRechargeValidationUrl;
154
 
155
	@Value("${oxigen.recharge.validation.auth.key}")
156
	private String oxigenRechargeValidationAuthKey;
157
 
158
	@Value("${think.walnut.digital.recharge.transaction.mobile.url}")
159
	private String thinkWalnutDigitalRechargeTransactionMobileUrl;
160
 
161
	@Value("${think.walnut.digital.recharge.transaction.dth.url}")
162
	private String thinkWalnutDigitalRechargeTransactionDthUrl;
163
 
164
	@Value("${think.walnut.digital.recharge.enquiry.url}")
165
	private String thinkWalnutDigitalRechargeEnquiryUrl;
166
 
167
	@Value("${think.walnut.digital.recharge.balance.url}")
168
	private String thinkWalnutDigitalRechargeBalanceUrl;
169
 
170
	@Value("${think.walnut.digital.recharge.username}")
171
	private String thinkWalnutDigitalRechargeUserName;
172
 
173
	@Value("${think.walnut.digital.recharge.password}")
174
	private String thinkWalnutDigitalRechargePassword;
175
 
176
	@Value("${think.walnut.digital.recharge.auth.key}")
177
	private String thinkWalnutDigitalRechargeAuthKey;
178
 
23723 amit.gupta 179
	@Autowired
23724 amit.gupta 180
	private PurchaseRepository purchaseRepository;
181
 
182
	@Autowired
183
	private SchemeService schemeService;
24683 amit.gupta 184
 
24681 amit.gupta 185
	@Autowired
186
	private ReporticoService reporticoService;
23724 amit.gupta 187
 
188
	@Autowired
24337 amit.gupta 189
	private PartnerInvestmentService partnerInvestmentService;
190
 
191
	@Autowired
24542 amit.gupta 192
	private FofoOrderItemRepository fofoOrderItemRepository;
193
 
194
	@Autowired
24277 amit.gupta 195
	private PartnerDailyInvestmentRepository partnerDailyInvestmentRepository;
196
 
197
	@Autowired
24241 amit.gupta 198
	private SchemeInOutRepository schemeInOutRepository;
199
 
200
	@Autowired
23724 amit.gupta 201
	private RechargeTransactionRepository rechargeTransactionRepository;
202
 
203
	@Autowired
24542 amit.gupta 204
	private CustomerAddressRepository customerAddressRepository;
205
 
206
	@Autowired
23724 amit.gupta 207
	private RechargeProviderCreditWalletHistoryRepository rechargeProviderCreditWalletHistoryRepository;
208
 
209
	@Autowired
24590 amit.gupta 210
	private FofoLineItemRepository fofoLineItemRepository;
211
 
212
	@Autowired
23724 amit.gupta 213
	private FofoOrderRepository fofoOrderRepository;
24587 amit.gupta 214
 
24580 amit.gupta 215
	@Autowired
216
	private UserWalletHistoryRepository userWalletHistoryRepository;
24250 amit.gupta 217
 
24249 amit.gupta 218
	@Autowired
24587 amit.gupta 219
	private UserWalletRepository userWalletRepository;
220
 
221
	@Autowired
24249 amit.gupta 222
	private InventoryItemRepository inventoryItemRepository;
23929 amit.gupta 223
 
23739 amit.gupta 224
	@Autowired
225
	private WalletService walletService;
23724 amit.gupta 226
 
227
	@Autowired
228
	private ThinkWalnutDigitalRechargeProviderService thinkWalnutDigitalRechargeProviderService;
229
 
230
	@Autowired
231
	private OxigenRechargeProviderService oxigenRechargeProviderService;
232
 
233
	@Autowired
234
	private RechargeProviderRepository rechargeProviderRepository;
235
 
236
	@Autowired
24242 amit.gupta 237
	private ScanRecordRepository scanRecordRepository;
238
 
239
	@Autowired
23724 amit.gupta 240
	private DailyRechargeRepository dailyRechargeRepository;
241
 
23929 amit.gupta 242
	@Autowired
243
	private FofoStoreRepository fofoStoreRepository;
24177 govind 244
 
24121 govind 245
	@Autowired
246
	private TargetSlabService targetService;
23929 amit.gupta 247
 
23724 amit.gupta 248
	@Value("${prod}")
249
	private boolean prod;
250
 
23929 amit.gupta 251
	@Autowired
252
	private RetailerService retailerService;
253
 
254
	@Autowired
255
	private TransactionService transactionService;
24250 amit.gupta 256
 
24249 amit.gupta 257
	@Autowired
258
	private ItemRepository itemRepository;
23929 amit.gupta 259
 
260
	@Autowired
261
	private OrderRepository orderRepository;
25351 tejbeer 262
 
25335 amit.gupta 263
	@Autowired
264
	private OrderService orderService;
23929 amit.gupta 265
 
266
	@Autowired
24241 amit.gupta 267
	private SchemeRepository schemeRepository;
268
 
269
	@Autowired
23929 amit.gupta 270
	private JavaMailSender mailSender;
24177 govind 271
 
24174 govind 272
	@Autowired
24431 amit.gupta 273
	private PriceDropRepository priceDropRepository;
274
 
275
	@Autowired
24174 govind 276
	private PartnerTargetRepository partnerTargetRepository;
24002 amit.gupta 277
 
278
	@Autowired
279
	@Qualifier(value = "googleMailSender")
23932 amit.gupta 280
	private JavaMailSender googleMailSender;
23929 amit.gupta 281
 
282
	@Autowired
283
	private InventoryService inventoryService;
284
 
24533 govind 285
	@Autowired
24542 amit.gupta 286
	private AddressRepository addressRepository;
287
 
288
	@Autowired
289
	private RetailerRegisteredAddressRepository retailerRegisteredAddressRepository;
290
 
24653 govind 291
	@Autowired
292
	private Mongo mongoClient;
24683 amit.gupta 293
 
24669 govind 294
	@Autowired
25300 tejbeer 295
	private DeviceRepository deviceRepository;
296
 
297
	@Autowired
298
	private PushNotificationRepository pushNotificationRepository;
299
 
300
	@Autowired
301
	private NotificationCampaignRepository notificationCampaignRepository;
302
 
303
	@Autowired
24669 govind 304
	private UserAccountRepository userAccountRepository;
24653 govind 305
 
23755 amit.gupta 306
	private static final Logger LOGGER = LogManager.getLogger(ScheduledTasks.class);
23724 amit.gupta 307
 
25300 tejbeer 308
	private String FCM_URL = "https://fcm.googleapis.com/fcm/send";
309
	private String FCM_API_KEY = "AAAASAjNcn4:APA91bG6fWRIgYJI0L9gCjP5ynaXz2hJHYKtD9dfH7Depdv31Nd9APJwhx-OPkAJ1WSz4BGNYG8lHThLFSjDGFxIwUZv241YcAJEGDLgt86mxq9FXJe-yBRu-S0_ZwHqmX-QaVKl5F_A";
310
 
23724 amit.gupta 311
	public void generateDailyRecharge() {
312
		List<RechargeProviderCreditWalletHistory> allCreditHistory = rechargeProviderCreditWalletHistoryRepository
313
				.selectAll(0, 2000);
314
		List<RechargeProvider> rechargeProviders = rechargeProviderRepository.selectAll();
315
		rechargeProviders.stream().forEach(x -> x.setAmount(0));
316
 
317
		rechargeProviders.stream().forEach(x -> {
318
			Map<LocalDate, List<RechargeProviderCreditWalletHistory>> dateWiseProviderCreditsMap = allCreditHistory
319
					.stream().filter(z -> z.getProviderId() == x.getId())
320
					.collect(Collectors.groupingBy(x1 -> x1.getReceiveTimestamp().toLocalDate()));
321
 
322
			LOGGER.info("dateWiseProviderCreditsMap -- {}", dateWiseProviderCreditsMap);
323
			LocalDate endDate = LocalDate.now().plusDays(1);
324
			float previousDayClosing = 0;
325
			LocalDate date = LocalDate.of(2018, 4, 6);
326
			while (date.isBefore(endDate)) {
327
				List<RechargeTransaction> dateWiseRechargeTransactions = rechargeTransactionRepository
328
						.selectAllBetweenTimestamp(Arrays.asList(RechargeStatus.values()), date.atStartOfDay(),
329
								date.plusDays(1).atStartOfDay());
330
 
331
				List<RechargeTransaction> successfulTransactions = dateWiseRechargeTransactions.stream()
332
						.filter(y -> y.getStatus().equals(RechargeStatus.SUCCESS)).collect(Collectors.toList());
333
 
334
				float dailyAmount = 0;
335
				float totalCommission = 0;
336
				for (RechargeTransaction rechargeTransaction : successfulTransactions) {
337
					if (rechargeTransaction.getProviderId() == x.getId()) {
338
						dailyAmount += rechargeTransaction.getAmount();
339
						totalCommission += rechargeTransaction.getCommission();
340
					}
341
				}
342
 
343
				List<RechargeProviderCreditWalletHistory> rechargeHistoryList = dateWiseProviderCreditsMap.get(date);
344
				float dailyWalletRecharge = 0;
345
				if (rechargeHistoryList != null) {
346
					for (RechargeProviderCreditWalletHistory rechargeProviderCreditWalletHistory : rechargeHistoryList) {
347
						if (rechargeProviderCreditWalletHistory.getProviderId() == x.getId()) {
348
							dailyWalletRecharge += rechargeProviderCreditWalletHistory.getAmount();
349
						}
350
					}
351
				}
352
				if (dailyAmount > 0 || dailyWalletRecharge > 0) {
353
					DailyRecharge dailyRecharge = null;
354
					try {
355
						dailyRecharge = dailyRechargeRepository.selectByProviderIdAndCreateDate(x.getId(), date);
356
					} catch (Exception e) {
357
						LOGGER.info("Could not find Recharge entry");
358
					}
359
					if (dailyRecharge == null) {
360
						dailyRecharge = new DailyRecharge();
361
						dailyRecharge.setCreateDate(date);
362
					}
363
					dailyRecharge.setOpeningBalance(previousDayClosing);
364
					dailyRecharge.setProviderId(x.getId());
365
					dailyRecharge.setWalletRechargeAmount(dailyWalletRecharge);
366
					dailyRecharge.setTotalAmount(dailyAmount);
367
					dailyRecharge.setTotalCommission(totalCommission);
368
					float closingBalance = dailyRecharge.getOpeningBalance() + dailyWalletRecharge - dailyAmount;
369
					dailyRecharge.setClosingBalance(closingBalance);
370
					dailyRechargeRepository.persist(dailyRecharge);
371
					x.setAmount(x.getAmount() + dailyRecharge.getClosingBalance() - dailyRecharge.getOpeningBalance());
372
					previousDayClosing = dailyRecharge.getClosingBalance();
373
				}
374
				date = date.plusDays(1);
375
			}
376
			rechargeProviderRepository.persist(x);
377
		});
23761 amit.gupta 378
		LOGGER.info("finished generating daily recharge");
23724 amit.gupta 379
	}
380
 
23738 amit.gupta 381
	public void reconcileRecharge() throws Exception {
23724 amit.gupta 382
		LocalDateTime fromDate = LocalDateTime.now().truncatedTo(ChronoUnit.DAYS).minusDays(30);
383
		LocalDateTime toDate = LocalDateTime.now().truncatedTo(ChronoUnit.DAYS);
384
		List<RechargeStatus> nonSuccessRechargeStatuses = new ArrayList<>(Arrays.asList(RechargeStatus.values()));
385
		LOGGER.info("nonSuccessRechargeStatuses {} ", nonSuccessRechargeStatuses);
386
		nonSuccessRechargeStatuses.remove(RechargeStatus.SUCCESS);
387
		nonSuccessRechargeStatuses.remove(RechargeStatus.FAILED);
388
		RechargeCredential thinkWalnutDigitalRechargeEnquiryCredential = new RechargeCredential();
389
		thinkWalnutDigitalRechargeEnquiryCredential.setRechargeUrl(thinkWalnutDigitalRechargeEnquiryUrl);
390
		thinkWalnutDigitalRechargeEnquiryCredential.setRechargeUserName(thinkWalnutDigitalRechargeUserName);
391
		thinkWalnutDigitalRechargeEnquiryCredential.setRechargePassword(thinkWalnutDigitalRechargePassword);
392
		thinkWalnutDigitalRechargeEnquiryCredential.setRechargeAuthKey(thinkWalnutDigitalRechargeAuthKey);
393
		Map<String, RechargeStatus> requestRechargeStatusChanged = new HashMap<>();
394
		List<RechargeTransaction> rechargeTransactions = rechargeTransactionRepository
395
				.selectAllBetweenTimestamp(nonSuccessRechargeStatuses, fromDate, toDate);
396
		for (RechargeTransaction rechargeTransaction : rechargeTransactions) {
397
			try {
398
				int providerId = rechargeTransaction.getProviderId();
399
				if (providerId == 1) {
400
					oxigenRechargeProviderService.doCheckStatusRequest(oxigenRechargeEnquiryUrl, oxigenRechargeAuthKey,
401
							rechargeTransaction);
402
				} else if (providerId == 2) {
403
					thinkWalnutDigitalRechargeProviderService
404
							.doCheckStatusRequest(thinkWalnutDigitalRechargeEnquiryCredential, rechargeTransaction);
405
				}
406
				if (rechargeTransaction.getStatus().equals(RechargeStatus.SUCCESS)
407
						|| rechargeTransaction.getStatus().equals(RechargeStatus.FAILED)) {
408
					requestRechargeStatusChanged.put(rechargeTransaction.getRequestId(),
409
							rechargeTransaction.getStatus());
410
				}
411
			} catch (Exception e) {
412
				LOGGER.info("Could not check status for Request {}", rechargeTransaction.getRequestId());
413
			}
414
		}
23738 amit.gupta 415
		LOGGER.info("Reconcile recharge ran successfully");
23724 amit.gupta 416
	}
24240 amit.gupta 417
 
418
	// TemporaryMethod
24237 amit.gupta 419
	public void migrateInvoice() {
420
		List<FofoOrder> fofoOrders = fofoOrderRepository.selectFromSaleDate(LocalDateTime.now().minusDays(3));
421
		Map<Integer, List<FofoOrder>> partnerOrdersMap = new HashMap<>();
24241 amit.gupta 422
		partnerOrdersMap = fofoOrders.stream()
423
				.collect(Collectors.groupingBy(FofoOrder::getFofoId, Collectors.toList()));
24237 amit.gupta 424
		for (List<FofoOrder> orderList : partnerOrdersMap.values()) {
24240 amit.gupta 425
			int sequence = 0;
426
			String prefix = "";
24241 amit.gupta 427
			List<FofoOrder> sortedList = orderList.stream().sorted((x1, x2) -> x1.getId() - x2.getId())
428
					.collect(Collectors.toList());
429
			for (FofoOrder order : sortedList) {
430
 
24240 amit.gupta 431
				LOGGER.info("Order Id is {}, partner Id is {}", order.getId(), order.getFofoId());
24241 amit.gupta 432
				if (!order.getInvoiceNumber().contains("SEC")) {
24240 amit.gupta 433
					sequence = Integer.parseInt(order.getInvoiceNumber().split("/")[1]);
434
					prefix = order.getInvoiceNumber().split("/")[0];
435
				} else {
436
					sequence += 1;
24241 amit.gupta 437
					String invoiceNumber = prefix + "/" + sequence;
24240 amit.gupta 438
					order.setInvoiceNumber(invoiceNumber);
439
					fofoOrderRepository.persist(order);
440
				}
441
			}
24241 amit.gupta 442
 
24237 amit.gupta 443
		}
444
	}
23724 amit.gupta 445
 
24241 amit.gupta 446
	// Temporary Method
24252 amit.gupta 447
	public void evaluateExcessSchemeOut() throws Exception {
24244 amit.gupta 448
		Map<Integer, String> userNameMap = retailerService.getAllFofoRetailerIdNameMap();
449
		Map<Integer, Float> userAmountMap = new HashMap<>();
24252 amit.gupta 450
 
24807 amit.gupta 451
		List<List<? extends Serializable>> rows = new ArrayList<>();
24271 amit.gupta 452
		List<String> headers = Arrays.asList("Scheme", "Item", "Partner", "Amount", "Credited On", "Invoice Number",
453
				"Sale On", "Scheme Start", "Scheme End", "Active On", "Expired On");
24241 amit.gupta 454
		schemeRepository.selectAll().stream().forEach(x -> {
24250 amit.gupta 455
			if (x.getType().equals(SchemeType.OUT)) {
456
				List<SchemeInOut> sioList = schemeInOutRepository
457
						.selectBySchemeIds(new HashSet<>(Arrays.asList(x.getId())));
458
				if (x.getActiveTimestamp() != null) {
459
					LocalDateTime endDateTime = x.getEndDateTime();
460
					if (x.getExpireTimestamp() != null && x.getExpireTimestamp().isBefore(x.getEndDateTime())) {
461
						endDateTime = x.getExpireTimestamp();
24249 amit.gupta 462
					}
24250 amit.gupta 463
					for (SchemeInOut sio : sioList) {
464
						InventoryItem inventoryItem = null;
24266 amit.gupta 465
						inventoryItem = inventoryItemRepository.selectById(sio.getInventoryItemId());
24271 amit.gupta 466
						FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndSerialNumber(
467
								inventoryItem.getFofoId(), inventoryItem.getSerialNumber(), null, null, 0, 1).get(0);
24250 amit.gupta 468
						Optional<ScanRecord> record = scanRecordRepository
469
								.selectByInventoryItemId(sio.getInventoryItemId()).stream()
470
								.filter(y -> y.getType().equals(ScanType.SALE)).findFirst();
471
						if (record.isPresent()) {
472
							int fofoId = record.get().getFofoId();
473
							if (record.get().getCreateTimestamp().isAfter(endDateTime)
474
									|| record.get().getCreateTimestamp().isBefore(x.getStartDateTime())) {
475
								if (!userAmountMap.containsKey(fofoId)) {
476
									userAmountMap.put(fofoId, 0f);
477
								}
478
								userAmountMap.put(fofoId, sio.getAmount() + userAmountMap.get(fofoId));
479
								try {
24252 amit.gupta 480
									rows.add(Arrays.asList(x.getDescription(),
24250 amit.gupta 481
											itemRepository.selectById(inventoryItem.getItemId()).getItemDescription(),
24252 amit.gupta 482
											userNameMap.get(fofoId), sio.getAmount(),
24253 amit.gupta 483
											FormattingUtils.formatDate(sio.getCreateTimestamp()),
484
											fofoOrder.getInvoiceNumber(),
485
											FormattingUtils.formatDate(record.get().getCreateTimestamp()),
486
											FormattingUtils.formatDate(x.getStartDateTime()),
487
											FormattingUtils.formatDate(x.getEndDateTime()),
488
											FormattingUtils.formatDate(x.getActiveTimestamp()),
489
											FormattingUtils.formatDate(x.getExpireTimestamp())));
24250 amit.gupta 490
								} catch (Exception e) {
491
									e.printStackTrace();
492
								}
24242 amit.gupta 493
							}
24241 amit.gupta 494
						}
495
					}
496
				}
497
			}
498
		});
24246 amit.gupta 499
		userAmountMap.entrySet().stream()
500
				.forEach(x -> LOGGER.info("{} to be deducted from {}({}) for wrongly disbursed due to technical error.",
501
						x.getValue(), userNameMap.get(x.getKey())));
24241 amit.gupta 502
 
24252 amit.gupta 503
		ByteArrayOutputStream baos = FileUtil.getCSVByteStream(headers, rows);
24271 amit.gupta 504
		Utils.sendMailWithAttachment(googleMailSender,
505
				new String[] { "amit.gupta@shop2020.in", "adeel.yazdani@smartdukaan.com" }, null,
506
				"Partner Excess Amount", "PFA", "ListofSchemes.csv", new ByteArrayResource(baos.toByteArray()));
24252 amit.gupta 507
 
24241 amit.gupta 508
	}
24271 amit.gupta 509
 
25584 amit.gupta 510
	public void processScheme(int offset, boolean dryRun) throws Exception {
24462 amit.gupta 511
		LocalDateTime startDate = LocalDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT).minusDays(offset);
24259 amit.gupta 512
		LocalDateTime endDate = startDate.plusDays(30);
25584 amit.gupta 513
		processScheme(startDate, endDate, dryRun);
24256 amit.gupta 514
	}
24533 govind 515
 
25584 amit.gupta 516
	public void processScheme(int offset, int durationDays, boolean dryRun) throws Exception {
24462 amit.gupta 517
		LocalDateTime startDate = LocalDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT).minusDays(offset);
24461 amit.gupta 518
		LocalDateTime endDate = startDate.plusDays(durationDays);
25584 amit.gupta 519
		processScheme(startDate, endDate, dryRun);
24461 amit.gupta 520
	}
24271 amit.gupta 521
 
25584 amit.gupta 522
	public void processScheme(boolean dryRun) throws Exception {
24256 amit.gupta 523
		LocalDateTime fromDate = LocalDateTime.now().minusDays(30);
25584 amit.gupta 524
		processScheme(fromDate, LocalDateTime.now(), dryRun);
24256 amit.gupta 525
	}
24271 amit.gupta 526
 
25584 amit.gupta 527
	public void processScheme(LocalDateTime startDate, LocalDateTime endDate, boolean dryRun) throws Exception {
23724 amit.gupta 528
		LOGGER.info("Started execution at {}", LocalDateTime.now());
25312 amit.gupta 529
		System.out.println(
530
				"InventoryId\tSerialNumber\tItem Id\tScheme Id\tScheme Name\tScheme Type\tAmount Type\tDP\tTaxable\tScheme Amount\tAmount Paid");
24561 amit.gupta 531
		try {
24587 amit.gupta 532
			List<Purchase> purchases = purchaseRepository.selectAllBetweenPurchaseDate(startDate, endDate);
533
			for (Purchase purchase : purchases) {
534
				schemeService.processSchemeIn(purchase.getId(), purchase.getFofoId());
535
			}
24271 amit.gupta 536
 
24587 amit.gupta 537
			List<FofoOrder> fofoOrders = fofoOrderRepository.selectBetweenSaleDate(startDate, endDate);
538
			for (FofoOrder fofoOrder : fofoOrders) {
539
				schemeService.processSchemeOut(fofoOrder.getId(), fofoOrder.getFofoId());
540
			}
541
		} catch (Exception e) {
24561 amit.gupta 542
			e.printStackTrace();
24565 amit.gupta 543
			throw e;
24561 amit.gupta 544
		}
25312 amit.gupta 545
		List<UserWalletHistory> uwhs = userWalletHistoryRepository.selectAllByDateType(startDate, endDate,
546
				Arrays.asList(WalletReferenceType.SCHEME_IN, WalletReferenceType.SCHEME_OUT));
25043 amit.gupta 547
		System.out.println("Amount\tReference\tReferenceType\tTimestamp\tDescription");
25312 amit.gupta 548
		for (UserWalletHistory uwh : uwhs) {
549
			System.out.println(String.format("%d\t%d\t%s\t%s\t%s", uwh.getAmount(), uwh.getReference(),
550
					uwh.getReferenceType(), uwh.getTimestamp().toString(), uwh.getDescription()));
25043 amit.gupta 551
		}
23724 amit.gupta 552
		LOGGER.info("Schemes process successfully.");
25584 amit.gupta 553
		if(dryRun) {
554
			throw new Exception();
555
		}
23724 amit.gupta 556
	}
23929 amit.gupta 557
 
23739 amit.gupta 558
	public void processRechargeCashback() throws Throwable {
23761 amit.gupta 559
		LocalDateTime cashbackTime = LocalDateTime.now();
23929 amit.gupta 560
		int referenceId = (int) Timestamp.valueOf(cashbackTime).getTime() / 1000;
561
		List<RechargeTransaction> pendingTransactions = rechargeTransactionRepository
562
				.getPendingCashBackRehargeTransactions();
563
		Map<Object, Double> totalRetailerCashbacks = pendingTransactions.stream().collect(
564
				Collectors.groupingBy(x -> x.getRetailerId(), Collectors.summingDouble(x -> x.getCommission())));
565
		for (Map.Entry<Object, Double> totalRetailerCashback : totalRetailerCashbacks.entrySet()) {
566
			int retailerId = (Integer) totalRetailerCashback.getKey();
23739 amit.gupta 567
			float amount = totalRetailerCashback.getValue().floatValue();
23929 amit.gupta 568
			if (Math.round(amount) > 0) {
569
				walletService.addAmountToWallet(retailerId, referenceId, WalletReferenceType.CASHBACK,
570
						"Recharge Cashback", Math.round(amount));
23762 amit.gupta 571
			}
23739 amit.gupta 572
		}
23929 amit.gupta 573
		for (RechargeTransaction rt : pendingTransactions) {
23761 amit.gupta 574
			rt.setCashbackTimestamp(cashbackTime);
575
			rt.setCashbackReference(referenceId);
576
			rechargeTransactionRepository.persist(rt);
577
		}
23739 amit.gupta 578
		LOGGER.info("Cashbacks for Recharge processed Successfully");
579
	}
23724 amit.gupta 580
 
24271 amit.gupta 581
	public void sendPartnerInvestmentDetails(List<String> sendTo) throws Exception {
25312 amit.gupta 582
		if (sendTo == null) {
25341 amit.gupta 583
			sendTo = Arrays.asList("tarun.verma@smartdukaan.com", "kamini.sharma@smartdukaan.com",
25509 tejbeer 584
					"amit.gupta@shop2020.in", "amod.sen@smartdukaan.com");
25312 amit.gupta 585
		}
24277 amit.gupta 586
		LocalDate yesterDay = LocalDate.now().minusDays(1);
25267 amit.gupta 587
		List<FofoStore> fofoStores = fofoStoreRepository.selectActiveStores();
23929 amit.gupta 588
		Map<Integer, CustomRetailer> customRetailerMap = retailerService
589
				.getFofoRetailers(fofoStores.stream().map(x -> x.getId()).collect(Collectors.toList()));
25351 tejbeer 590
 
25345 amit.gupta 591
		List<String> headers = Arrays.asList("Code", "Firm Name", "Store Name", "State Manager", "Teritory Manager",
25312 amit.gupta 592
				"Team Leader", "Wallet Amount", "In Stock Amount", "Return In Transit Stock", "Unbilled Amount",
25342 amit.gupta 593
				"Grn Pending Amount", "Min Investment", "Investment Amount", "Investment Short", "Unbilled Qty");
24807 amit.gupta 594
		List<List<? extends Serializable>> rows = new ArrayList<>();
25312 amit.gupta 595
		Map<String, List<? extends Serializable>> partnerRow = new HashMap<>();
24002 amit.gupta 596
		for (FofoStore fofoStore : fofoStores) {
25314 amit.gupta 597
			if (!fofoStore.isActive())
598
				continue;
24002 amit.gupta 599
			CustomRetailer retailer = customRetailerMap.get(fofoStore.getId());
25314 amit.gupta 600
			if (retailer == null || storeManagerMap.get(retailer.getEmail()) == null) {
24002 amit.gupta 601
				LOGGER.info("Could not find retailer with retailer Id {}", fofoStore.getId());
602
				continue;
603
			}
24533 govind 604
			PartnerDailyInvestment partnerDailyInvestment = partnerInvestmentService.getInvestment(fofoStore.getId(),
605
					1);
24337 amit.gupta 606
			partnerDailyInvestment.setDate(yesterDay);
607
			partnerDailyInvestmentRepository.persist(partnerDailyInvestment);
24533 govind 608
 
25351 tejbeer 609
			List<? extends Serializable> row = Arrays.asList(fofoStore.getCode(), retailer.getBusinessName(),
610
					"SmartDukaan-" + fofoStore.getCode().replaceAll("[a-zA-Z]+", ""),
25312 amit.gupta 611
					storeManagerMap.get(retailer.getEmail()).get(2), storeManagerMap.get(retailer.getEmail()).get(1),
25351 tejbeer 612
					storeManagerMap.get(retailer.getEmail()).get(0), partnerDailyInvestment.getWalletAmount(),
613
					partnerDailyInvestment.getInStockAmount(), 0, partnerDailyInvestment.getUnbilledAmount(),
614
					partnerDailyInvestment.getGrnPendingAmount(), partnerDailyInvestment.getMinInvestment(),
615
					partnerDailyInvestment.getTotalInvestment(), partnerDailyInvestment.getShortInvestment(),
25335 amit.gupta 616
					partnerDailyInvestment.getUnbilledQty());
25312 amit.gupta 617
			partnerRow.put(retailer.getEmail(), row);
24002 amit.gupta 618
			rows.add(row);
619
 
23929 amit.gupta 620
		}
25312 amit.gupta 621
		Map<String, Set<String>> storeGuyMap = new HashMap<>();
622
		for (Map.Entry<String, List<String>> entry : storeManagerMap.entrySet()) {
623
			String storeEmail = entry.getKey();
624
			List<String> storeGuys = entry.getValue();
625
			for (String storeGuy : storeGuys) {
626
				if (!storeGuyMap.containsKey(storeGuy)) {
627
					storeGuyMap.put(storeGuy, new HashSet<>());
628
				}
629
				storeGuyMap.get(storeGuy).add(storeEmail);
630
			}
631
		}
25322 amit.gupta 632
		storeGuyMap.remove("");
25312 amit.gupta 633
 
24271 amit.gupta 634
		String fileName = "InvestmentSummary-" + FormattingUtils.formatDate(LocalDateTime.now()) + ".csv";
25341 amit.gupta 635
		for (Map.Entry<String, Set<String>> storeGuyEntry : storeGuyMap.entrySet()) {
25312 amit.gupta 636
			List<List<? extends Serializable>> filteredRows = storeGuyEntry.getValue().stream()
25351 tejbeer 637
					.map(x -> partnerRow.get(x)).filter(x -> x != null).collect(Collectors.toList());
25312 amit.gupta 638
			ByteArrayOutputStream baos = FileUtil.getCSVByteStream(headers, filteredRows);
25321 amit.gupta 639
			String[] sendToArray = new String[] { nameEmail.get(storeGuyEntry.getKey()) };
25312 amit.gupta 640
			Utils.sendMailWithAttachment(googleMailSender, sendToArray, null, "Partner Investment Summary", "PFA",
641
					fileName, new ByteArrayResource(baos.toByteArray()));
25341 amit.gupta 642
		}
25312 amit.gupta 643
 
24002 amit.gupta 644
		ByteArrayOutputStream baos = FileUtil.getCSVByteStream(headers, rows);
24271 amit.gupta 645
		String[] sendToArray = sendTo.toArray(new String[sendTo.size()]);
646
		Utils.sendMailWithAttachment(googleMailSender, sendToArray, null, "Partner Investment Summary", "PFA", fileName,
647
				new ByteArrayResource(baos.toByteArray()));
648
 
23929 amit.gupta 649
	}
24177 govind 650
 
24271 amit.gupta 651
	public void sendPartnerInvestmentDetails() throws Exception {
25565 amit.gupta 652
		this.sendPartnerInvestmentDetails(null);
24271 amit.gupta 653
 
654
	}
655
 
25312 amit.gupta 656
	public void sendTargetVsSalesReport(List<String> sendTo) throws Exception {
24177 govind 657
 
25312 amit.gupta 658
		if (sendTo == null) {
25341 amit.gupta 659
			sendTo = Arrays.asList("tarun.verma@smartdukaan.com", "kamini.sharma@smartdukaan.com",
25509 tejbeer 660
					"amit.gupta@shop2020.in", "amod.sen@smartdukaan.com");
25312 amit.gupta 661
		}
24177 govind 662
		List<PartnerTargetDetails> partnerTargetDetails = partnerTargetRepository
25373 amit.gupta 663
				.selectAllGeEqAndLeEqStartDateAndEndDate(LocalDateTime.now().minusDays(1));
25312 amit.gupta 664
		Map<String, List<? extends Serializable>> partnerSalesTargetRowsMap = new HashMap<>();
24177 govind 665
		for (PartnerTargetDetails partnerTargetDetail : partnerTargetDetails) {
25312 amit.gupta 666
			partnerSalesTargetRowsMap.putAll(targetService.getDailySaleReportVsTarget(partnerTargetDetail));
24174 govind 667
		}
25315 amit.gupta 668
		Map<Integer, FofoStore> fofoStoresMap = fofoStoreRepository.selectActiveStores().stream()
669
				.collect(Collectors.toMap(x -> x.getId(), x -> x));
670
 
25312 amit.gupta 671
		Map<Integer, CustomRetailer> customRetailerMap = retailerService
25315 amit.gupta 672
				.getFofoRetailers(new ArrayList<>(fofoStoresMap.keySet()));
24177 govind 673
 
25315 amit.gupta 674
		Map<String, CustomRetailer> customRetailerEmailMap = customRetailerMap.values().stream()
675
				.collect(Collectors.toMap(x -> x.getEmail(), x -> x));
676
 
25345 amit.gupta 677
		List<String> headers = Arrays.asList("Code", "Firm Name", "Store Name", "State Manager", "Teritory Manager",
25327 amit.gupta 678
				"Team Leader", "Target Name", "Target Value", "Target Achieved", "Achived Percentage",
679
				"Remaining Target", "Today's Target", "Today's achievement");
24177 govind 680
 
25312 amit.gupta 681
		List<List<? extends Serializable>> rows = new ArrayList<>();
682
		Map<String, List<Serializable>> partnerRowMap = new HashMap<>();
25315 amit.gupta 683
		for (Map.Entry<String, List<? extends Serializable>> partnerSalesTargetRowEntry : partnerSalesTargetRowsMap
684
				.entrySet()) {
685
			CustomRetailer retailer = customRetailerEmailMap.get(partnerSalesTargetRowEntry.getKey());
686
			FofoStore fofoStore = fofoStoresMap.get(retailer.getPartnerId());
25312 amit.gupta 687
			Serializable code = fofoStore.getCode();
25345 amit.gupta 688
			Serializable storeName = "SmartDukaan-" + fofoStore.getCode().replaceAll("[a-zA-Z]", "");
25314 amit.gupta 689
			Serializable businessName = retailer.getBusinessName();
25317 amit.gupta 690
			try {
691
				Serializable stateManager = storeManagerMap.get(retailer.getEmail()).get(2);
692
				Serializable territoryManager = storeManagerMap.get(retailer.getEmail()).get(1);
693
				Serializable teamLeader = storeManagerMap.get(retailer.getEmail()).get(0);
694
				List<Serializable> row = new ArrayList<>(
25345 amit.gupta 695
						Arrays.asList(code, businessName, storeName, stateManager, territoryManager, teamLeader));
25317 amit.gupta 696
				if (partnerSalesTargetRowsMap.get(retailer.getEmail()) != null) {
25323 amit.gupta 697
					row.addAll(partnerSalesTargetRowsMap.get(retailer.getEmail()));
25317 amit.gupta 698
					partnerRowMap.put(retailer.getEmail(), row);
699
					rows.add(row);
700
				}
25351 tejbeer 701
			} catch (Exception e) {
25317 amit.gupta 702
				LOGGER.warn("Could not find partner with email - {}", retailer.getEmail());
25315 amit.gupta 703
			}
25312 amit.gupta 704
 
24177 govind 705
		}
25503 amit.gupta 706
 
25318 amit.gupta 707
		String fileName = "TargetVsSales-" + FormattingUtils.formatDate(LocalDateTime.now()) + ".csv";
25407 amit.gupta 708
		for (Map.Entry<String, Set<String>> storeGuyEntry : getStoreGuyMap().entrySet()) {
25312 amit.gupta 709
			List<List<? extends Serializable>> filteredRows = storeGuyEntry.getValue().stream()
25351 tejbeer 710
					.map(x -> partnerRowMap.get(x)).filter(x -> x != null).collect(Collectors.toList());
25312 amit.gupta 711
			ByteArrayOutputStream baos = FileUtil.getCSVByteStream(headers, filteredRows);
25320 amit.gupta 712
			String[] sendToArray = new String[] { nameEmail.get(storeGuyEntry.getKey()) };
25312 amit.gupta 713
			Utils.sendMailWithAttachment(googleMailSender, sendToArray, null, "Target vs Sales Summary", "PFA",
714
					fileName, new ByteArrayResource(baos.toByteArray()));
25341 amit.gupta 715
		}
24240 amit.gupta 716
 
25312 amit.gupta 717
		ByteArrayOutputStream baos = FileUtil.getCSVByteStream(headers, rows);
718
		String[] sendToArray = sendTo.toArray(new String[sendTo.size()]);
719
		Utils.sendMailWithAttachment(googleMailSender, sendToArray, null, "Target vs Sales Summary", "PFA", fileName,
720
				new ByteArrayResource(baos.toByteArray()));
24174 govind 721
	}
24683 amit.gupta 722
 
25407 amit.gupta 723
	private Map<String, Set<String>> getStoreGuyMap() {
724
		Map<String, Set<String>> storeGuyMap = new HashMap<>();
725
		for (Map.Entry<String, List<String>> entry : storeManagerMap.entrySet()) {
726
			String storeEmail = entry.getKey();
727
			List<String> storeGuys = entry.getValue();
728
			for (String storeGuy : storeGuys) {
729
				if (!storeGuyMap.containsKey(storeGuy)) {
730
					storeGuyMap.put(storeGuy, new HashSet<>());
731
				}
732
				storeGuyMap.get(storeGuy).add(storeEmail);
733
			}
734
		}
735
		storeGuyMap.remove("");
736
		return storeGuyMap;
737
	}
738
 
24697 amit.gupta 739
	public void sendAgeingReport(String... sendTo) throws Exception {
24692 amit.gupta 740
 
741
		InputStreamSource isr = reporticoService.getReportInputStreamSource(ReporticoProject.WAREHOUSENEW,
742
				"itemstockageing.xml");
24708 amit.gupta 743
		InputStreamSource isr1 = reporticoService.getReportInputStreamSource(ReporticoProject.FOCO,
24754 amit.gupta 744
				"ItemwiseOverallPendingIndent.xml");
24683 amit.gupta 745
		Attachment attachment = new Attachment(
25445 amit.gupta 746
				"ageing-report-" + FormattingUtils.formatDate(LocalDateTime.now().minusDays(1)) + ".csv", isr);
24707 amit.gupta 747
		Attachment attachment1 = new Attachment(
25445 amit.gupta 748
				"pending-indent-" + FormattingUtils.formatDate(LocalDateTime.now().minusDays(1)) + ".csv", isr1);
24841 govind 749
		Utils.sendMailWithAttachments(googleMailSender, sendTo, null, "Stock Aeging Report", "PFA", attachment,
750
				attachment1);
25418 amit.gupta 751
 
25583 amit.gupta 752
		//Reports to be sent to mapped partners
25418 amit.gupta 753
		Map<String, Set<String>> storeGuysMap = getStoreGuyMap();
25503 amit.gupta 754
 
25418 amit.gupta 755
		String[] sendToArray = new String[storeGuysMap.size()];
25503 amit.gupta 756
		int i = 0;
757
		for (String storeGuyName : storeGuysMap.keySet()) {
758
			sendToArray[i] = nameEmail.get(storeGuyName);
25418 amit.gupta 759
			i++;
760
		}
25407 amit.gupta 761
		Utils.sendMailWithAttachments(googleMailSender, sendToArray, null, "Stock Aeging Report", "PFA", attachment);
25503 amit.gupta 762
 
763
		for (Map.Entry<String, Set<String>> storeGuyEntry : storeGuysMap.entrySet()) {
25418 amit.gupta 764
			Map<String, String> params = new HashMap<>();
25503 amit.gupta 765
			if (storeGuyEntry.getValue().size() == 0)
766
				continue;
25418 amit.gupta 767
			params.put("MANUAL_email", String.join(",", storeGuyEntry.getValue()));
768
			InputStreamSource isr3 = reporticoService.getReportInputStreamSource(ReporticoProject.FOCO,
769
					"focostockreport.xml", params);
770
			Attachment attache = new Attachment(
25445 amit.gupta 771
					"partner-stock-report" + FormattingUtils.formatDate(LocalDateTime.now()) + ".csv", isr3);
25584 amit.gupta 772
			System.out.println(storeGuyEntry.getValue());
25503 amit.gupta 773
			Utils.sendMailWithAttachments(googleMailSender, storeGuyEntry.getValue().toArray(new String[] {}), null,
774
					"Partner Stock Report", "PFA", attache);
25418 amit.gupta 775
		}
25503 amit.gupta 776
 
24681 amit.gupta 777
	}
24533 govind 778
 
24697 amit.gupta 779
	public void sendAgeingReport() throws Exception {
25503 amit.gupta 780
		sendAgeingReport("kamini.sharma@smartdukaan.com", "tarun.verma@smartdukaan.com",
25583 amit.gupta 781
				"chaitnaya.vats@smartdukaan.com", "amod.sen@smartdukaan.com");
24697 amit.gupta 782
	}
783
 
24533 govind 784
	public void moveImeisToPriceDropImeis() throws Exception {
24431 amit.gupta 785
		List<PriceDrop> priceDrops = priceDropRepository.selectAll();
24533 govind 786
		for (PriceDrop priceDrop : priceDrops) {
24431 amit.gupta 787
			priceDropService.priceDropStatus(priceDrop.getId());
788
		}
789
	}
23929 amit.gupta 790
 
24542 amit.gupta 791
	public void walletmismatch() throws Exception {
792
		LocalDate curDate = LocalDate.now();
24553 amit.gupta 793
		List<PartnerDailyInvestment> pdis = partnerDailyInvestmentRepository.selectAll(curDate.minusDays(2));
24552 amit.gupta 794
		System.out.println(pdis.size());
24542 amit.gupta 795
		for (PartnerDailyInvestment pdi : pdis) {
24549 amit.gupta 796
			int fofoId = pdi.getFofoId();
24542 amit.gupta 797
			for (PartnerDailyInvestment investment : Lists
798
					.reverse(partnerDailyInvestmentRepository.selectAll(fofoId, null, null))) {
24552 amit.gupta 799
				float statementAmount = walletService.getOpeningTill(fofoId,
24555 amit.gupta 800
						investment.getDate().plusDays(1).atTime(LocalTime.of(4, 0)));
24552 amit.gupta 801
				CustomRetailer retailer = retailerService.getFofoRetailer(fofoId);
24841 govind 802
				LOGGER.info("{}\t{}\t{}\t{}\t{}", fofoId, retailer.getBusinessName(), retailer.getMobileNumber(),
803
						investment.getDate().toString(), investment.getWalletAmount(), statementAmount);
24551 amit.gupta 804
 
24542 amit.gupta 805
			}
24549 amit.gupta 806
		}
24542 amit.gupta 807
 
808
	}
809
 
810
	public void gst() throws Exception {
24548 amit.gupta 811
		List<FofoOrder> fofoOrders = fofoOrderRepository.selectBetweenSaleDate(LocalDate.of(2019, 1, 26).atStartOfDay(),
812
				LocalDate.of(2019, 1, 27).atTime(LocalTime.MAX));
813
		for (FofoOrder fofoOrder : fofoOrders) {
814
			int retailerAddressId = retailerRegisteredAddressRepository
815
					.selectAddressIdByRetailerId(fofoOrder.getFofoId());
24542 amit.gupta 816
 
817
			Address retailerAddress = addressRepository.selectById(retailerAddressId);
818
			CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
819
			Integer stateId = null;
820
			if (customerAddress.getState().equals(retailerAddress.getState())) {
821
				try {
822
					stateId = Long.valueOf(Utils.getStateInfo(customerAddress.getState()).getId()).intValue();
823
				} catch (Exception e) {
824
					LOGGER.error("Unable to get state rates");
825
				}
826
			}
827
			Map<Integer, GstRate> itemIdStateTaxRateMap = null;
828
			Map<Integer, Float> itemIdIgstTaxRateMap = null;
24548 amit.gupta 829
 
830
			List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
831
			Set<Integer> itemIds = fofoOrderItems.stream().map(x -> x.getItemId()).collect(Collectors.toSet());
24542 amit.gupta 832
			if (stateId != null) {
833
				itemIdStateTaxRateMap = Utils.getStateTaxRate(new ArrayList<>(itemIds), stateId);
834
			} else {
835
				itemIdIgstTaxRateMap = Utils.getIgstTaxRate(new ArrayList<>(itemIds));
836
			}
837
 
24548 amit.gupta 838
			for (FofoOrderItem foi : fofoOrderItems) {
24542 amit.gupta 839
				if (stateId == null) {
840
					foi.setIgstRate(itemIdIgstTaxRateMap.get(foi.getItemId()));
841
				} else {
842
					foi.setCgstRate(itemIdStateTaxRateMap.get(foi.getItemId()).getCgstRate());
843
					foi.setSgstRate(itemIdStateTaxRateMap.get(foi.getItemId()).getSgstRate());
844
				}
845
				fofoOrderItemRepository.persist(foi);
846
			}
847
		}
24548 amit.gupta 848
 
24542 amit.gupta 849
	}
850
 
24580 amit.gupta 851
	public void schemewalletmismatch() {
852
		LocalDate dateToReconcile = LocalDate.of(2018, 4, 1);
24587 amit.gupta 853
		while (dateToReconcile.isBefore(LocalDate.now())) {
24580 amit.gupta 854
			reconcileSchemes(dateToReconcile);
24587 amit.gupta 855
			// reconcileOrders(dateTime);
856
			// reconcileRecharges(dateTime);
24580 amit.gupta 857
			dateToReconcile = dateToReconcile.plusDays(1);
858
		}
859
	}
860
 
861
	private void reconcileSchemes(LocalDate date) {
862
		LocalDateTime startDate = date.atStartOfDay();
863
		LocalDateTime endDate = startDate.plusDays(1);
864
		List<SchemeInOut> siosCreated = schemeInOutRepository.selectAllByCreateDate(startDate, endDate);
865
		List<SchemeInOut> siosRefunded = schemeInOutRepository.selectAllByRefundDate(startDate, endDate);
24587 amit.gupta 866
		double totalSchemeDisbursed = siosCreated.stream().mapToDouble(x -> x.getAmount()).sum();
867
		double totalSchemeRolledback = siosRefunded.stream().mapToDouble(x -> x.getAmount()).sum();
24580 amit.gupta 868
		double netSchemeDisbursed = totalSchemeDisbursed - totalSchemeRolledback;
24587 amit.gupta 869
		List<WalletReferenceType> walletReferenceTypes = Arrays.asList(WalletReferenceType.SCHEME_IN,
870
				WalletReferenceType.SCHEME_OUT);
871
		List<UserWalletHistory> history = userWalletHistoryRepository.selectAllByDateType(startDate, endDate,
872
				walletReferenceTypes);
873
		double schemeAmountWalletTotal = history.stream().mapToDouble(x -> x.getAmount()).sum();
874
		if (Math.abs(netSchemeDisbursed - schemeAmountWalletTotal) > 10d) {
24580 amit.gupta 875
			LOGGER.info("Scheme Amount mismatched for Date {}", date);
24587 amit.gupta 876
 
877
			Map<Integer, Double> inventoryItemSchemeIO = siosCreated.stream().collect(Collectors
878
					.groupingBy(x -> x.getInventoryItemId(), Collectors.summingDouble(SchemeInOut::getAmount)));
879
 
880
			Map<Integer, Double> userSchemeMap = inventoryItemRepository.selectByIds(inventoryItemSchemeIO.keySet())
881
					.stream().collect(Collectors.groupingBy(x -> x.getFofoId(),
882
							Collectors.summingDouble(x -> inventoryItemSchemeIO.get(x.getId()))));
883
 
884
			Map<Integer, Double> inventoryItemSchemeIORefunded = siosRefunded.stream().collect(Collectors
885
					.groupingBy(x -> x.getInventoryItemId(), Collectors.summingDouble(SchemeInOut::getAmount)));
886
 
887
			Map<Integer, Double> userSchemeRefundedMap = inventoryItemRepository
888
					.selectByIds(inventoryItemSchemeIORefunded.keySet()).stream()
889
					.collect(Collectors.groupingBy(x -> x.getFofoId(),
890
							Collectors.summingDouble(x -> inventoryItemSchemeIORefunded.get(x.getId()))));
891
 
892
			Map<Integer, Double> finalUserSchemeAmountMap = new HashMap<>();
893
			for (Map.Entry<Integer, Double> schemeAmount : userSchemeMap.entrySet()) {
894
			}
895
			for (Map.Entry<Integer, Double> schemeAmount : userSchemeRefundedMap.entrySet()) {
896
				if (!finalUserSchemeAmountMap.containsKey(schemeAmount.getKey())) {
897
					finalUserSchemeAmountMap.put(schemeAmount.getKey(), schemeAmount.getValue());
898
				} else {
899
					finalUserSchemeAmountMap.put(schemeAmount.getKey(),
900
							finalUserSchemeAmountMap.get(schemeAmount.getKey()) + schemeAmount.getValue());
901
				}
902
			}
24590 amit.gupta 903
			Map<Integer, Integer> userWalletMap = userWalletRepository
904
					.selectByRetailerIds(finalUserSchemeAmountMap.keySet()).stream()
905
					.collect(Collectors.toMap(UserWallet::getUserId, UserWallet::getId));
906
 
24587 amit.gupta 907
			Map<Integer, Double> walletAmountMap = history.stream().collect(Collectors.groupingBy(
908
					UserWalletHistory::getWalletId, Collectors.summingDouble((UserWalletHistory::getAmount))));
909
			for (Map.Entry<Integer, Double> userAmount : walletAmountMap.entrySet()) {
910
				double diff = Math.abs(finalUserSchemeAmountMap.get(userAmount.getKey()) - userAmount.getValue());
911
				if (diff > 5) {
912
					LOGGER.info("Partner scheme mismatched for Userid {}", userWalletMap.get(userAmount.getKey()));
913
				}
914
			}
24580 amit.gupta 915
		}
24587 amit.gupta 916
 
24580 amit.gupta 917
	}
24590 amit.gupta 918
 
24592 amit.gupta 919
	public void dryRunSchemeReco() throws Exception {
24635 amit.gupta 920
		Map<Integer, Integer> userWalletMap = userWalletRepository.selectAll().stream()
921
				.collect(Collectors.toMap(UserWallet::getUserId, UserWallet::getId));
922
 
24592 amit.gupta 923
		List<UserWalletHistory> userWalletHistory = new ArrayList<>();
924
		List<SchemeInOut> rolledbackSios = new ArrayList<>();
24635 amit.gupta 925
		Map<Integer, SchemeType> schemeTypeMap = schemeRepository.selectAll().stream()
926
				.collect(Collectors.toMap(Scheme::getId, Scheme::getType));
927
		Set<String> serialNumbersConsidered = new HashSet<>();
928
 
25096 amit.gupta 929
		LocalDateTime startDate = LocalDate.of(2018, 3, 1).atStartOfDay();
24635 amit.gupta 930
		LocalDateTime endDate = LocalDate.now().atStartOfDay();
931
		List<Purchase> purchases = purchaseRepository.selectAllBetweenPurchaseDate(startDate, endDate);
932
 
24683 amit.gupta 933
		Map<Integer, String> storeNameMap = fofoStoreRepository.getStoresMap();
24635 amit.gupta 934
		purchases.stream().forEach(purchase -> {
935
			float amountToRollback = 0;
936
			String description = "Adjustment of Duplicate Scheme for Purchase Invoice "
937
					+ purchase.getPurchaseReference();
938
			Map<Integer, String> inventorySerialNumberMap = inventoryItemRepository.selectByPurchaseId(purchase.getId())
939
					.stream().filter(ii -> ii.getSerialNumber() != null)
940
					.collect(Collectors.toMap(InventoryItem::getId, InventoryItem::getSerialNumber));
941
			if (inventorySerialNumberMap.size() > 0) {
942
				for (Map.Entry<Integer, String> inventorySerialNumberEntry : inventorySerialNumberMap.entrySet()) {
943
					String serialNumber = inventorySerialNumberEntry.getValue();
944
					int inventoryItemId = inventorySerialNumberEntry.getKey();
945
					if (serialNumbersConsidered.contains(serialNumber)) {
946
						// This will rollback scheme for differenct orders for same serial
947
						List<SchemeInOut> sios = schemeInOutRepository
948
								.selectByInventoryItemIds(new HashSet<>(Arrays.asList(inventoryItemId))).stream()
949
								.filter(x -> x.getRolledBackTimestamp() == null
950
										&& schemeTypeMap.get(x.getSchemeId()).equals(SchemeType.IN))
951
								.collect(Collectors.toList());
952
						Collections.reverse(sios);
953
						for (SchemeInOut sio : sios) {
954
							sio.setRolledBackTimestamp(LocalDateTime.now());
955
							amountToRollback += sio.getAmount();
956
							// sio.setSchemeType(SchemeType.OUT);
957
							sio.setSerialNumber(serialNumber);
958
							rolledbackSios.add(sio);
959
						}
960
						description = description.concat(" " + serialNumber + " ");
961
					} else {
962
						serialNumbersConsidered.add(serialNumber);
963
						List<Integer> schemesConsidered = new ArrayList<>();
964
						List<SchemeInOut> sios = schemeInOutRepository
965
								.selectByInventoryItemIds(new HashSet<>(Arrays.asList(inventoryItemId))).stream()
966
								.filter(x -> x.getRolledBackTimestamp() == null
967
										&& schemeTypeMap.get(x.getSchemeId()).equals(SchemeType.IN))
968
								.collect(Collectors.toList());
969
						Collections.reverse(sios);
970
						for (SchemeInOut sio : sios) {
971
							if (!schemesConsidered.contains(sio.getSchemeId())) {
972
								schemesConsidered.add(sio.getSchemeId());
973
								continue;
974
							}
975
							sio.setRolledBackTimestamp(LocalDateTime.now());
976
							amountToRollback += sio.getAmount();
977
							// sio.setSchemeType(SchemeType.OUT);
978
							sio.setSerialNumber(serialNumber);
24681 amit.gupta 979
							sio.setStoreCode(storeNameMap.get(purchase.getFofoId()));
980
							sio.setReference(purchase.getId());
24635 amit.gupta 981
							rolledbackSios.add(sio);
982
						}
983
					}
984
 
985
				}
986
			}
987
			if (amountToRollback > 0) {
24683 amit.gupta 988
				// Address address =
989
				// addressRepository.selectAllByRetailerId(purchase.getFofoId(), 0, 10).get(0);
24635 amit.gupta 990
				UserWalletHistory uwh = new UserWalletHistory();
991
				uwh.setAmount(Math.round(amountToRollback));
992
				uwh.setDescription(description);
993
				uwh.setTimestamp(LocalDateTime.now());
24681 amit.gupta 994
				uwh.setReferenceType(WalletReferenceType.SCHEME_IN);
24635 amit.gupta 995
				uwh.setReference(purchase.getId());
996
				uwh.setWalletId(userWalletMap.get(purchase.getFofoId()));
997
				uwh.setFofoId(purchase.getFofoId());
24681 amit.gupta 998
				uwh.setStoreCode(storeNameMap.get(purchase.getFofoId()));
24635 amit.gupta 999
				userWalletHistory.add(uwh);
1000
			}
1001
		});
1002
		ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
1003
				Arrays.asList("User Id", "Store Code", "Reference Type", "Reference", "Amount", "Description",
1004
						"Timestamp"),
1005
				userWalletHistory.stream()
1006
						.map(x -> Arrays.asList(x.getWalletId(), x.getStoreCode(), x.getReferenceType(),
1007
								x.getReference(), x.getAmount(), x.getDescription(), x.getTimestamp()))
1008
						.collect(Collectors.toList()));
1009
 
1010
		ByteArrayOutputStream baosOuts = FileUtil.getCSVByteStream(
24683 amit.gupta 1011
				Arrays.asList("Scheme ID", "SchemeType", "Reference", "Store Code", "Serial Number", "Amount",
1012
						"Created", "Rolledback"),
24635 amit.gupta 1013
				rolledbackSios.stream()
24681 amit.gupta 1014
						.map(x -> Arrays.asList(x.getSchemeId(), x.getSchemeType(), x.getReference(), x.getStoreCode(),
24635 amit.gupta 1015
								x.getSerialNumber(), x.getAmount(), x.getCreateTimestamp(), x.getRolledBackTimestamp()))
1016
						.collect(Collectors.toList()));
1017
 
25043 amit.gupta 1018
		Utils.sendMailWithAttachments(googleMailSender, new String[] { "amit.gupta@shop2020.in" }, null,
24636 amit.gupta 1019
				"Partner Excess Amount Scheme In", "PFA",
24635 amit.gupta 1020
				new Attachment[] { new Attachment("WalletSummary.csv", new ByteArrayResource(baos.toByteArray())),
24636 amit.gupta 1021
						new Attachment("SchemeInRolledback.csv", new ByteArrayResource(baosOuts.toByteArray())) });
24635 amit.gupta 1022
 
25096 amit.gupta 1023
		throw new Exception();
24635 amit.gupta 1024
 
1025
	}
1026
 
1027
	public void dryRunOutSchemeReco() throws Exception {
1028
		List<UserWalletHistory> userWalletHistory = new ArrayList<>();
1029
		List<SchemeInOut> rolledbackSios = new ArrayList<>();
24606 amit.gupta 1030
		Map<Integer, Integer> userWalletMap = userWalletRepository.selectAll().stream()
1031
				.collect(Collectors.toMap(UserWallet::getUserId, UserWallet::getId));
24590 amit.gupta 1032
		Map<Integer, SchemeType> schemeTypeMap = schemeRepository.selectAll().stream()
1033
				.collect(Collectors.toMap(Scheme::getId, Scheme::getType));
25028 amit.gupta 1034
		LocalDateTime startDate = LocalDate.of(2019, 5, 1).atStartOfDay();
24632 amit.gupta 1035
		LocalDateTime endDate = LocalDate.now().atStartOfDay();
24631 amit.gupta 1036
		List<FofoOrder> allOrders = fofoOrderRepository.selectBetweenSaleDate(startDate, endDate);
1037
		// Collections.reverse(allOrders);
1038
		// List<FofoOrder> allOrders =
24653 govind 1039
		// List<FofoOrder> allOrders =
24631 amit.gupta 1040
		// Arrays.asList(fofoOrderRepository.selectByInvoiceNumber("UPGZ019/25"));
24625 amit.gupta 1041
		Set<String> serialNumbersConsidered = new HashSet<>();
24590 amit.gupta 1042
		allOrders.stream().forEach(fofoOrder -> {
24592 amit.gupta 1043
			String description = "Adjustment of Duplicate Scheme for Sale Invoice " + fofoOrder.getInvoiceNumber();
24598 amit.gupta 1044
			Map<Integer, String> inventorySerialNumberMap = new HashMap<>();
24592 amit.gupta 1045
			float amountToRollback = 0;
24590 amit.gupta 1046
			List<FofoOrderItem> orderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
1047
			orderItems.forEach(x -> {
24606 amit.gupta 1048
				inventorySerialNumberMap.putAll(x.getFofoLineItems().stream().filter(li -> li.getSerialNumber() != null)
24598 amit.gupta 1049
						.collect(Collectors.toMap(FofoLineItem::getInventoryItemId, FofoLineItem::getSerialNumber)));
24590 amit.gupta 1050
			});
24606 amit.gupta 1051
			if (inventorySerialNumberMap.size() > 0) {
24631 amit.gupta 1052
				for (Map.Entry<Integer, String> inventorySerialNumberEntry : inventorySerialNumberMap.entrySet()) {
1053
					String serialNumber = inventorySerialNumberEntry.getValue();
1054
					int inventoryItemId = inventorySerialNumberEntry.getKey();
1055
					if (serialNumbersConsidered.contains(serialNumber)) {
1056
						// This will rollback scheme for differenct orders for same serial
1057
						List<SchemeInOut> sios = schemeInOutRepository
24633 amit.gupta 1058
								.selectByInventoryItemIds(new HashSet<>(Arrays.asList(inventoryItemId))).stream()
24635 amit.gupta 1059
								.filter(x -> x.getRolledBackTimestamp() == null
1060
										&& schemeTypeMap.get(x.getSchemeId()).equals(SchemeType.OUT))
24631 amit.gupta 1061
								.collect(Collectors.toList());
1062
						Collections.reverse(sios);
1063
						for (SchemeInOut sio : sios) {
1064
							sio.setRolledBackTimestamp(LocalDateTime.now());
1065
							amountToRollback += sio.getAmount();
1066
							// sio.setSchemeType(SchemeType.OUT);
1067
							sio.setSerialNumber(serialNumber);
1068
							sio.setStoreCode(fofoOrder.getInvoiceNumber().split("/")[0]);
24681 amit.gupta 1069
							sio.setReference(fofoOrder.getId());
24631 amit.gupta 1070
							rolledbackSios.add(sio);
24623 amit.gupta 1071
						}
24635 amit.gupta 1072
						description = description.concat(" " + serialNumber + " ");
24631 amit.gupta 1073
					} else {
1074
						serialNumbersConsidered.add(serialNumber);
1075
						List<Integer> schemesConsidered = new ArrayList<>();
1076
						List<SchemeInOut> sios = schemeInOutRepository
24633 amit.gupta 1077
								.selectByInventoryItemIds(new HashSet<>(Arrays.asList(inventoryItemId))).stream()
24635 amit.gupta 1078
								.filter(x -> x.getRolledBackTimestamp() == null
1079
										&& schemeTypeMap.get(x.getSchemeId()).equals(SchemeType.OUT))
24631 amit.gupta 1080
								.collect(Collectors.toList());
1081
						Collections.reverse(sios);
1082
						for (SchemeInOut sio : sios) {
1083
							if (!schemesConsidered.contains(sio.getSchemeId())) {
1084
								schemesConsidered.add(sio.getSchemeId());
1085
								continue;
1086
							}
1087
							sio.setRolledBackTimestamp(LocalDateTime.now());
1088
							amountToRollback += sio.getAmount();
1089
							// sio.setSchemeType(SchemeType.OUT);
24681 amit.gupta 1090
							sio.setReference(fofoOrder.getId());
24631 amit.gupta 1091
							sio.setSerialNumber(serialNumber);
1092
							sio.setStoreCode(fofoOrder.getInvoiceNumber().split("/")[0]);
1093
							rolledbackSios.add(sio);
1094
						}
24615 amit.gupta 1095
					}
24631 amit.gupta 1096
 
24604 amit.gupta 1097
				}
24590 amit.gupta 1098
			}
24631 amit.gupta 1099
			if (amountToRollback > 0) {
1100
				UserWalletHistory uwh = new UserWalletHistory();
1101
				uwh.setAmount(Math.round(amountToRollback));
1102
				uwh.setDescription(description);
1103
				uwh.setTimestamp(LocalDateTime.now());
1104
				uwh.setReferenceType(WalletReferenceType.SCHEME_OUT);
1105
				uwh.setReference(fofoOrder.getId());
1106
				uwh.setWalletId(userWalletMap.get(fofoOrder.getFofoId()));
1107
				uwh.setFofoId(fofoOrder.getFofoId());
1108
				uwh.setStoreCode(fofoOrder.getInvoiceNumber().split("/")[0]);
1109
				userWalletHistory.add(uwh);
1110
			}
24590 amit.gupta 1111
		});
24598 amit.gupta 1112
 
24592 amit.gupta 1113
		ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
24681 amit.gupta 1114
				Arrays.asList("Wallet Id", "Store Code", "Reference Type", "Reference", "Amount", "Description",
24615 amit.gupta 1115
						"Timestamp"),
1116
				userWalletHistory.stream()
1117
						.map(x -> Arrays.asList(x.getWalletId(), x.getStoreCode(), x.getReferenceType(),
1118
								x.getReference(), x.getAmount(), x.getDescription(), x.getTimestamp()))
24592 amit.gupta 1119
						.collect(Collectors.toList()));
1120
 
1121
		ByteArrayOutputStream baosOuts = FileUtil.getCSVByteStream(
1122
				Arrays.asList("Scheme ID", "SchemeType", "Store Code", "Serial Number", "Amount", "Created",
1123
						"Rolledback"),
1124
				rolledbackSios.stream()
1125
						.map(x -> Arrays.asList(x.getSchemeId(), x.getSchemeType(), x.getStoreCode(),
1126
								x.getSerialNumber(), x.getAmount(), x.getCreateTimestamp(), x.getRolledBackTimestamp()))
1127
						.collect(Collectors.toList()));
1128
 
25043 amit.gupta 1129
		Utils.sendMailWithAttachments(googleMailSender, new String[] { "amit.gupta@shop2020.in" }, null,
24681 amit.gupta 1130
				"Partner Excess Amount Scheme Out", "PFA",
24598 amit.gupta 1131
				new Attachment[] { new Attachment("WalletSummary.csv", new ByteArrayResource(baos.toByteArray())),
1132
						new Attachment("SchemeOutRolledback.csv", new ByteArrayResource(baosOuts.toByteArray())) });
24631 amit.gupta 1133
 
25267 amit.gupta 1134
		throw new Exception();
24590 amit.gupta 1135
	}
24615 amit.gupta 1136
 
24611 amit.gupta 1137
	public void dryRunSchemeOutReco1() throws Exception {
24615 amit.gupta 1138
		List<Integer> references = Arrays.asList(6744, 7347, 8320, 8891, 9124, 9217, 9263, 9379);
24611 amit.gupta 1139
		List<UserWalletHistory> userWalletHistory = new ArrayList<>();
1140
		List<SchemeInOut> rolledbackSios = new ArrayList<>();
1141
		Map<Integer, Integer> userWalletMap = userWalletRepository.selectAll().stream()
1142
				.collect(Collectors.toMap(UserWallet::getUserId, UserWallet::getId));
1143
		Map<Integer, SchemeType> schemeTypeMap = schemeRepository.selectAll().stream()
1144
				.collect(Collectors.toMap(Scheme::getId, Scheme::getType));
1145
		references.stream().forEach(reference -> {
1146
			FofoOrder fofoOrder = null;
1147
			try {
1148
				fofoOrder = fofoOrderRepository.selectByOrderId(reference);
24615 amit.gupta 1149
			} catch (Exception e) {
1150
 
24611 amit.gupta 1151
			}
1152
			String description = "Adjustment of Duplicate Scheme for Sale Invoice " + fofoOrder.getInvoiceNumber();
1153
			Map<Integer, String> inventorySerialNumberMap = new HashMap<>();
1154
			float amountToRollback = 0;
1155
			List<FofoOrderItem> orderItems = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
1156
			orderItems.forEach(x -> {
1157
				inventorySerialNumberMap.putAll(x.getFofoLineItems().stream().filter(li -> li.getSerialNumber() != null)
1158
						.collect(Collectors.toMap(FofoLineItem::getInventoryItemId, FofoLineItem::getSerialNumber)));
1159
			});
1160
			if (inventorySerialNumberMap.size() > 0) {
24615 amit.gupta 1161
				List<SchemeInOut> sios = schemeInOutRepository
1162
						.selectByInventoryItemIds(inventorySerialNumberMap.keySet()).stream()
1163
						.filter(x -> schemeTypeMap.get(x.getSchemeId()).equals(SchemeType.OUT))
24611 amit.gupta 1164
						.collect(Collectors.toList());
1165
				LOGGER.info("Found {} duplicate schemeouts for Orderid {}", sios.size(), fofoOrder.getId());
1166
				UserWalletHistory uwh = new UserWalletHistory();
24615 amit.gupta 1167
				Map<Integer, List<SchemeInOut>> inventoryIdSouts = sios.stream()
1168
						.collect(Collectors.groupingBy(SchemeInOut::getInventoryItemId, Collectors.toList()));
24611 amit.gupta 1169
				for (Map.Entry<Integer, List<SchemeInOut>> inventorySioEntry : inventoryIdSouts.entrySet()) {
1170
					List<SchemeInOut> outList = inventorySioEntry.getValue();
24615 amit.gupta 1171
					if (outList.size() > 1) {
1172
 
24611 amit.gupta 1173
					}
1174
				}
1175
				uwh.setAmount(Math.round(amountToRollback));
1176
				uwh.setDescription(description);
1177
				uwh.setTimestamp(LocalDateTime.now());
1178
				uwh.setReferenceType(WalletReferenceType.SCHEME_OUT);
1179
				uwh.setReference(fofoOrder.getId());
1180
				uwh.setWalletId(userWalletMap.get(fofoOrder.getFofoId()));
1181
				uwh.setFofoId(fofoOrder.getFofoId());
1182
				uwh.setStoreCode(fofoOrder.getInvoiceNumber().split("/")[0]);
1183
				userWalletHistory.add(uwh);
1184
			}
1185
		});
24615 amit.gupta 1186
 
24611 amit.gupta 1187
		ByteArrayOutputStream baos = FileUtil.getCSVByteStream(
1188
				Arrays.asList("User Id", "Reference Type", "Reference", "Amount", "Description", "Timestamp"),
1189
				userWalletHistory.stream().map(x -> Arrays.asList(x.getWalletId(), x.getReferenceType(),
1190
						x.getReference(), x.getAmount(), x.getDescription(), x.getTimestamp()))
24615 amit.gupta 1191
						.collect(Collectors.toList()));
1192
 
24611 amit.gupta 1193
		ByteArrayOutputStream baosOuts = FileUtil.getCSVByteStream(
1194
				Arrays.asList("Scheme ID", "SchemeType", "Store Code", "Serial Number", "Amount", "Created",
1195
						"Rolledback"),
1196
				rolledbackSios.stream()
24615 amit.gupta 1197
						.map(x -> Arrays.asList(x.getSchemeId(), x.getSchemeType(), x.getStoreCode(),
1198
								x.getSerialNumber(), x.getAmount(), x.getCreateTimestamp(), x.getRolledBackTimestamp()))
1199
						.collect(Collectors.toList()));
1200
 
24623 amit.gupta 1201
		Utils.sendMailWithAttachments(googleMailSender,
1202
				new String[] { "amit.gupta@shop2020.in", "neeraj.gupta@smartdukaan.com" }, null,
24611 amit.gupta 1203
				"Partner Excess Amount", "PFA",
1204
				new Attachment[] { new Attachment("WalletSummary.csv", new ByteArrayResource(baos.toByteArray())),
1205
						new Attachment("SchemeOutRolledback.csv", new ByteArrayResource(baosOuts.toByteArray())) });
24631 amit.gupta 1206
 
24628 amit.gupta 1207
		throw new Exception();
24615 amit.gupta 1208
 
24611 amit.gupta 1209
	}
24615 amit.gupta 1210
 
24855 amit.gupta 1211
	public void sendDailySalesReportNotificationToPartner(Integer fofoIdInt)
24653 govind 1212
			throws ProfitMandiBusinessException, MessagingException, IOException {
1213
		LocalDateTime now = LocalDateTime.now();
1214
		LocalDateTime from = LocalDateTime.of(now.getYear(), now.getMonth(), now.getDayOfMonth(), 00, 00);
1215
		Map<Integer, Double> salesByFofoIdMap = new HashMap<>();
24855 amit.gupta 1216
		List<Integer> fofoIds = null;
25043 amit.gupta 1217
		if (fofoIdInt == null) {
1218
			fofoIds = fofoStoreRepository.selectAll().stream().filter(x -> x.isActive()).map(x -> x.getId())
1219
					.collect(Collectors.toList());
24856 amit.gupta 1220
		} else {
24855 amit.gupta 1221
			fofoIds = Arrays.asList(fofoIdInt);
1222
		}
24653 govind 1223
		List<PartnerTargetDetails> partnerTargetDetails = partnerTargetRepository
1224
				.selectAllGeEqAndLeEqStartDateAndEndDate(now);
24683 amit.gupta 1225
		DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("h a");
1226
 
1227
		Map<Integer, Float> dailyTarget = new HashMap<>();
24653 govind 1228
		for (Integer fofoId : fofoIds) {
24683 amit.gupta 1229
			Map<Integer, Float> dailyAverageSale = null;
24653 govind 1230
			double sale = fofoOrderRepository.selectTotalSaleSumByFofoIdBrtweenDate(fofoId, from, now);
1231
			for (PartnerTargetDetails partnerTargetDetail : partnerTargetDetails) {
1232
				Map<Integer, Float> targetValues = targetService.getTargetValueByFofoIdAndTargetId(fofoId,
1233
						partnerTargetDetail.getId());
1234
				if (targetValues.size() == 0) {
1235
					continue;
1236
				} else {
1237
					List<Integer> partnerIds = new ArrayList<>();
1238
					partnerIds.add(fofoId);
1239
					dailyAverageSale = targetService.getDailyAverageSaleForCurrentForSingleFofoIdAndBrand(partnerIds,
1240
							targetValues, partnerTargetDetail.getStartDate(), partnerTargetDetail.getEndDate(),
1241
							partnerTargetDetail.getBrandName());
1242
					dailyTarget.put(fofoId, dailyAverageSale.get(fofoId));
1243
					break;
1244
				}
1245
			}
1246
			NotificationCampaigns notification = new NotificationCampaigns();
24847 amit.gupta 1247
			notification.setName("Daily Sales");
1248
			notification.setTitle("Daily Sale Update");
24683 amit.gupta 1249
			if (dailyAverageSale != null && dailyAverageSale.get(fofoId) != null) {
24864 amit.gupta 1250
				notification.setMessage(String.format("Rs.%.0f till %s. Today's Target is Rs.%.0f", sale,
24847 amit.gupta 1251
						now.format(timeFormatter), dailyAverageSale.get(fofoId)));
24683 amit.gupta 1252
			} else {
25043 amit.gupta 1253
				notification.setMessage(String.format("Rs.%.0f till %s", sale, now.format(timeFormatter)));
24653 govind 1254
			}
24683 amit.gupta 1255
			// notification.setMessage("Your sale is "+salesbyfofoId.get(fofoId));
24989 tejbeer 1256
			notification.setType("url");
24863 govind 1257
			notification.setUrl("http://app.profitmandi.com/pages/home/notifications");
24683 amit.gupta 1258
			LOGGER.info("UserID" + userAccountRepository.selectUserIdByRetailerId(fofoId));
1259
			notification.setSql("SELECT distinct d1.user_id from devices d1 left join devices d2 on"
1260
					+ "(d1.imeinumber = d2.imeinumber and d1.created < d2.created) "
1261
					+ " where d2.id is null and d1.user_id = "
1262
					+ userAccountRepository.selectUserIdByRetailerId(fofoId));
24676 govind 1263
			LOGGER.info("SELECT distinct d1.user_id from devices d1 left join devices d2 on"
24683 amit.gupta 1264
					+ "(d1.imeinumber = d2.imeinumber and d1.created < d2.created) "
1265
					+ " where d2.id is null and d1.user_id = "
1266
					+ userAccountRepository.selectUserIdByRetailerId(fofoId));
24667 govind 1267
			notification.setExpiresat(LocalDateTime.now().plusDays(1).toEpochSecond(ZoneOffset.UTC) * 1000);
24653 govind 1268
			notification.setStatus("active");
1269
			notification.setSmsprocessed(0);
1270
			notification.setNotification_processed(0);
1271
			notification.setNotification_type("GENERAL_NOTIFICATION");
24657 govind 1272
			mongoClient.persistNotificationCmpInfo(notification);
24653 govind 1273
			salesByFofoIdMap.put(fofoId, sale);
1274
			LOGGER.info(sale);
1275
		}
24683 amit.gupta 1276
		String saleReport = this.getDailySalesReportByPartnerId(salesByFofoIdMap, dailyTarget);
24653 govind 1277
		LOGGER.info(saleReport);
1278
		String cc[] = { "Tarun.verma@smartdukaan.com", "Kamini.sharma@smartdukaan.com",
24697 amit.gupta 1279
				"chaitnaya.vats@smartdukaan.com", "adeel.yazdani@smartdukaan.com", "mohinder.mutreja@smartdukaan.com" };
24653 govind 1280
		String subject = "sale report till" + " " + now.format(timeFormatter);
24677 govind 1281
		this.sendMailOfHtmlFomat("amod.sen@smartdukaan.com", saleReport, cc, subject);
24653 govind 1282
	}
1283
 
24683 amit.gupta 1284
	public String getDailySalesReportByPartnerId(Map<Integer, Double> salesByFofoIdMap, Map<Integer, Float> dailyTarget)
24653 govind 1285
			throws ProfitMandiBusinessException {
1286
		StringBuilder sb = new StringBuilder();
1287
		sb.append("<html><body><p>Sale Report:</p><br/><table style='border:1px solid black ;padding: 5px';>");
1288
		sb.append("<tbody>\n" + "	    				<tr>\n"
1289
				+ "	    					<th style='border:1px solid black;padding: 5px'>Partner</th>\n"
1290
				+ "	    					<th style='border:1px solid black;padding: 5px'>Daily Target</th>\n"
1291
				+ "	    					<th style='border:1px solid black;padding: 5px'>Sale</th>\n"
1292
				+ "	    				</tr>");
1293
		for (Integer fofoId : salesByFofoIdMap.keySet()) {
25043 amit.gupta 1294
			try {
1295
				String PartnerName = retailerService.getFofoRetailer(fofoId).getBusinessName();
1296
				sb.append("<tr>");
1297
				sb.append("<td style='border:1px solid black;padding: 5px'>" + PartnerName + "</td>");
1298
				if (dailyTarget != null && dailyTarget.get(fofoId) != null) {
1299
					sb.append("<td style='border:1px solid black;padding: 5px'>" + dailyTarget.get(fofoId) + "</td>");
1300
				} else {
1301
					sb.append("<td style='border:1px solid black;padding: 5px'>" + 0.0 + "</td>");
1302
				}
1303
				sb.append("<td style='border:1px solid black;padding: 5px'>" + salesByFofoIdMap.get(fofoId) + "</td>");
24653 govind 1304
 
25043 amit.gupta 1305
				sb.append("</tr>");
1306
			} catch (Exception e) {
24842 govind 1307
				e.printStackTrace();
1308
			}
25043 amit.gupta 1309
 
24653 govind 1310
		}
24683 amit.gupta 1311
 
24653 govind 1312
		sb.append("</tbody></table></body></html>");
1313
		return sb.toString();
1314
	}
24841 govind 1315
 
1316
	private void sendMailOfHtmlFomat(String email, String body, String cc[], String subject)
1317
			throws MessagingException, ProfitMandiBusinessException, IOException {
1318
		MimeMessage message = mailSender.createMimeMessage();
1319
		MimeMessageHelper helper = new MimeMessageHelper(message);
1320
		helper.setSubject(subject);
1321
		helper.setText(body, true);
1322
		helper.setTo(email);
1323
		if (cc != null) {
1324
			helper.setCc(cc);
1325
		}
1326
		InternetAddress senderAddress = new InternetAddress("noreply@smartdukaan.com", "Smart Dukaan");
1327
		helper.setFrom(senderAddress);
1328
		mailSender.send(message);
1329
	}
25300 tejbeer 1330
 
25351 tejbeer 1331
	public void sendNotification() throws Exception {
25300 tejbeer 1332
		List<PushNotifications> pushNotifications = pushNotificationRepository.selectAllByTimestamp();
1333
		if (!pushNotifications.isEmpty()) {
1334
			for (PushNotifications pushNotification : pushNotifications) {
25351 tejbeer 1335
				Device device = deviceRepository.selectById(pushNotification.getDeviceId());
25300 tejbeer 1336
				NotificationCampaign notificationCampaign = notificationCampaignRepository
1337
						.selectById(pushNotification.getNotificationCampaignid());
1338
				Gson gson = new GsonBuilder().setPrettyPrinting().serializeNulls()
1339
						.registerTypeAdapter(LocalDateTime.class, new LocalDateTimeJsonConverter()).create();
1340
 
1341
				SimpleCampaignParams scp = gson.fromJson(notificationCampaign.getImplementationParams(),
1342
						SimpleCampaignParams.class);
1343
				Campaign campaign = new SimpleCampaign(scp);
25351 tejbeer 1344
				String result_url = campaign.getUrl() + "&user_id=" + device.getUser_id();
25300 tejbeer 1345
				JSONObject json = new JSONObject();
25351 tejbeer 1346
				json.put("to", device.getFcmId());
25300 tejbeer 1347
				JSONObject jsonObj = new JSONObject();
1348
				jsonObj.put("message", campaign.getMessage());
1349
				jsonObj.put("title", campaign.getTitle());
1350
				jsonObj.put("type", campaign.getType());
1351
				jsonObj.put("url", result_url);
1352
				jsonObj.put("time_to_live", campaign.getExpireTimestamp());
1353
				jsonObj.put("image", campaign.getImageUrl());
1354
				jsonObj.put("largeIcon", "large_icon");
1355
				jsonObj.put("smallIcon", "small_icon");
1356
				jsonObj.put("vibrate", 1);
1357
				jsonObj.put("pid", pushNotification.getId());
1358
				jsonObj.put("sound", 1);
1359
				jsonObj.put("priority", "high");
1360
				json.put("data", jsonObj);
25351 tejbeer 1361
				try {
1362
					CloseableHttpClient client = HttpClients.createDefault();
1363
					HttpPost httpPost = new HttpPost(FCM_URL);
25300 tejbeer 1364
 
25351 tejbeer 1365
					httpPost.setHeader("Content-Type", "application/json; utf-8");
1366
					httpPost.setHeader("authorization", "key=" + FCM_API_KEY);
1367
					StringEntity entity = new StringEntity(json.toString());
1368
					httpPost.setEntity(entity);
1369
					CloseableHttpResponse response = client.execute(httpPost);
1370
					LOGGER.info("response" + response);
25300 tejbeer 1371
 
25351 tejbeer 1372
					if (response.getStatusLine().getStatusCode() == 200) {
1373
						pushNotification.setSentTimestamp(LocalDateTime.now());
1374
					} else {
25356 tejbeer 1375
						pushNotification.setSentTimestamp(LocalDateTime.of(1970, 1, 1, 00, 00));
25351 tejbeer 1376
						LOGGER.info("message" + "not sent");
1377
					}
25300 tejbeer 1378
 
25351 tejbeer 1379
				} catch (Exception e) {
1380
					e.printStackTrace();
25300 tejbeer 1381
					LOGGER.info("message" + "not sent");
1382
				}
1383
			}
1384
		}
1385
	}
1386
 
25312 amit.gupta 1387
	public static final Map<String, List<String>> storeManagerMap = new HashMap<>();
1388
 
25445 amit.gupta 1389
	public static final Map<String, String> nameEmail = new HashMap<>();
25312 amit.gupta 1390
	static {
1391
		nameEmail.put("Amod", "amod.sen@smartdukaan.com");
25350 amit.gupta 1392
		nameEmail.put("Parmod", "parmod.kumar@smartdukaan.com");
25312 amit.gupta 1393
		nameEmail.put("Anis", "md.anis@smartdukaan.com");
25348 amit.gupta 1394
		nameEmail.put("Manoj", "manoj.singh@smartdukaan.com");
25312 amit.gupta 1395
		nameEmail.put("Adeel", "adeel.yazdani@smartdukaan.com");
25346 amit.gupta 1396
		nameEmail.put("Mohinder", "mohinder.mutreja@smartdukaan.com");
25312 amit.gupta 1397
		nameEmail.put("Dharmendar", "dharmender.verma@smartdukaan.com");
1398
		nameEmail.put("Rajat", "rajat.gupta@smartdukaan.com");
1399
		nameEmail.put("Ankit", "ankit.bhatia@smartdukaan.com");
1400
		nameEmail.put("Rajit", "rajit.alag@smartdukaan.com");
25348 amit.gupta 1401
		nameEmail.put("Gulshan", "gulshan.kumar@smartdukaan.com");
1402
		nameEmail.put("PramodSharma", "parmod.sharma@smartdukaan.com");
25509 tejbeer 1403
		nameEmail.put("Sohan", "sohan.lal@smartdukaan.com");
25510 tejbeer 1404
		nameEmail.put("Ajay", "ajay.kumar@smartdukaan.com");
25312 amit.gupta 1405
		// nameEmail.put("Gulshan","");
25567 tejbeer 1406
 
1407
		storeManagerMap.put("themobileplanet03@gmail.com", Arrays.asList("Amod", "", "Adeel"));
1408
		storeManagerMap.put("mobileplanet7599@gmail.com", Arrays.asList("PramodSharma", "Dharmendar", "Mohinder"));
1409
		storeManagerMap.put("robintelecom.snp@gmail.com", Arrays.asList("PramodSharma", "Dharmendar", "Mohinder"));
1410
		storeManagerMap.put("smartconnect4141@gmail.com", Arrays.asList("Amod", "", "Adeel"));
1411
		storeManagerMap.put("bhimsain919@gmail.com", Arrays.asList("PramodSharma", "Dharmendar", "Mohinder"));
1412
		storeManagerMap.put("babitaranirk@gmail.com", Arrays.asList("PramodSharma", "", "Mohinder"));
1413
		storeManagerMap.put("dharmendery079@gmail.com", Arrays.asList("Manoj", "", "Adeel"));
1414
		storeManagerMap.put("kkv.enterprises1@gmail.com", Arrays.asList("PramodSharma", "", "Mohinder"));
1415
		storeManagerMap.put("gulshersaifi74226@gmail.com", Arrays.asList("Amod", "", "Adeel"));
1416
		storeManagerMap.put("deepak.lalwani1985@gmail.com", Arrays.asList("Manoj", "", "Adeel"));
1417
		storeManagerMap.put("gupta.smartdukaan@gmail.com", Arrays.asList("Amod", "", "Adeel"));
1418
		storeManagerMap.put("sachinindri2006@gmail.com", Arrays.asList("PramodSharma", "Dharmendar", "Mohinder"));
1419
		storeManagerMap.put("kambojanil83@gmail.com", Arrays.asList("PramodSharma", "", "Mohinder"));
1420
		storeManagerMap.put("uppal.neeraj82@gmail.com", Arrays.asList("", "Ankit", "Mohinder"));
1421
		storeManagerMap.put("thefonehousekarnal@gmail.com", Arrays.asList("PramodSharma", "Dharmendar", "Mohinder"));
1422
		storeManagerMap.put("richa9910763006@gmail.com", Arrays.asList("Manoj", "", "Adeel"));
1423
		storeManagerMap.put("smartdukangzb@gmail.com", Arrays.asList("Manoj", "", "Adeel"));
1424
		storeManagerMap.put("lovelymobile183@gmail.com", Arrays.asList("Manoj", "", "Adeel"));
1425
		storeManagerMap.put("smartdukaan.sonepat@gmail.com", Arrays.asList("PramodSharma", "Dharmendar", "Mohinder"));
1426
		storeManagerMap.put("arunmittal299@gmail.com", Arrays.asList("PramodSharma", "Dharmendar", "Mohinder"));
1427
		storeManagerMap.put("gtc01100@gmail.com", Arrays.asList("PramodSharma", "Dharmendar", "Mohinder"));
1428
		storeManagerMap.put("sumittyagi1975@gmail.com", Arrays.asList("Manoj", "", "Adeel"));
1429
		storeManagerMap.put("metrofurniture342@gmail.com", Arrays.asList("PramodSharma", "Dharmendar", "Mohinder"));
1430
		storeManagerMap.put("suryaelectronicskaithal@gmail.com", Arrays.asList("PramodSharma", "", "Mohinder"));
1431
		storeManagerMap.put("mmtelecomsec16@gmail.com", Arrays.asList("Amod", "", "Adeel"));
1432
		storeManagerMap.put("omsonsindia08@gmail.com", Arrays.asList("PramodSharma", "Dharmendar", "Mohinder"));
1433
		storeManagerMap.put("smartenterprisespv@gmail.com", Arrays.asList("Amod", "", "Adeel"));
1434
		storeManagerMap.put("cachaitnya@gmail.com", Arrays.asList("Amod", "", "Adeel"));
1435
		storeManagerMap.put("ajaykumarkansal03@gmail.com", Arrays.asList("Manoj", "", "Adeel"));
1436
		storeManagerMap.put("spurwar73@gmail.com", Arrays.asList("", "Rajat", "Adeel"));
1437
		storeManagerMap.put("Shreemobile.ind@gmail.com", Arrays.asList("", "Rajat", "Adeel"));
1438
		storeManagerMap.put("felixenterprises2017@rediffmail.com", Arrays.asList("", "Dharmendar", "Mohinder"));
1439
		storeManagerMap.put("nareandergupta@gmail.com", Arrays.asList("", "Dharmendar", "Mohinder"));
1440
		storeManagerMap.put("shreebalajielectronic2019@gmail.com", Arrays.asList("Manoj", "", "Adeel"));
1441
		storeManagerMap.put("saranshary@gmail.com", Arrays.asList("", "Dharmendar", "Mohinder"));
1442
		storeManagerMap.put("gambhirsmartphone@gmail.com", Arrays.asList("", "Gulshan", "Adeel"));
1443
		storeManagerMap.put("Priyankaenterprises9910@gmail.com", Arrays.asList("Manoj", "", "Adeel"));
1444
		storeManagerMap.put("pawan.dhimaan@gmail.com", Arrays.asList("", "Dharmendar", "Mohinder"));
1445
		storeManagerMap.put("lakshaydhulla62@gmail.com", Arrays.asList("PramodSharma", "Dharmendar", "Mohinder"));
1446
		storeManagerMap.put("parastelecom.stp@gmail.com", Arrays.asList("", "Rajat", "Adeel"));
1447
		storeManagerMap.put("talwarmukesh298@gmail.com", Arrays.asList("PramodSharma", "Dharmendar", "Mohinder"));
1448
		storeManagerMap.put("sahilnarang0009@gmail.com", Arrays.asList("PramodSharma", "", "Mohinder"));
1449
		storeManagerMap.put("supertelecomjind@gmail.com", Arrays.asList("", "Ankit", "Mohinder"));
1450
		storeManagerMap.put("saketnagpal@gmail.com", Arrays.asList("", "Rajit", "Mohinder"));
1451
		storeManagerMap.put("DEEPAKGOYAL702.DG@GMAIL.COM", Arrays.asList("", "Ankit", "Mohinder"));
1452
		storeManagerMap.put("sambhav350@gmail.com", Arrays.asList("PramodSharma", "Dharmendar", "Mohinder"));
1453
		storeManagerMap.put("mayankarora98133@gmail.com", Arrays.asList("", "Ankit", "Mohinder"));
1454
		storeManagerMap.put("vijaymobilityandmoew@gmail.com", Arrays.asList("Manoj", "", "Adeel"));
1455
		storeManagerMap.put("amitv70003@gmail.com", Arrays.asList("", "Ankit", "Mohinder"));
1456
		storeManagerMap.put("newagelucknow.123@gmail.com", Arrays.asList("", "Rajat", "Adeel"));
1457
		storeManagerMap.put("Newagetechnologygomtinagar@gmail.com", Arrays.asList("", "Rajat", "Adeel"));
1458
		storeManagerMap.put("rohitbatra106@gmail.com", Arrays.asList("PramodSharma", "Dharmendar", "Mohinder"));
1459
		storeManagerMap.put("sonisunil9050873061@gmail.com", Arrays.asList("", "Ankit", "Mohinder"));
1460
		storeManagerMap.put("moderncohsr@gmail.com", Arrays.asList("", "Ankit", "Mohinder"));
1461
		storeManagerMap.put("raghubir.ngh@gmail.com", Arrays.asList("", "Ankit", "Mohinder"));
1462
		storeManagerMap.put("aman007singla@gmail.com", Arrays.asList("", "Rajit", "Mohinder"));
1463
 
25509 tejbeer 1464
		storeManagerMap.put("suryaelectronicskaithal@gmail.com", Arrays.asList("Sohan", "Ankit", "Mohinder"));
1465
		storeManagerMap.put("amitv70003@gmail.com", Arrays.asList("Sohan", "Ankit", "Mohinder"));
1466
		storeManagerMap.put("uppal.neeraj82@gmail.com", Arrays.asList("", "Ankit", "Mohinder"));
1467
		storeManagerMap.put("DEEPAKGOYAL702.DG@GMAIL.COM", Arrays.asList("Sohan", "Ankit", "Mohinder"));
1468
		storeManagerMap.put("supertelecomjind@gmail.com", Arrays.asList("Sohan", "Ankit", "Mohinder"));
1469
		storeManagerMap.put("saranshary@gmail.com", Arrays.asList("", "Ankit", "Mohinder"));
1470
		storeManagerMap.put("sonisunil9050873061@gmail.com", Arrays.asList("Sohan", "Ankit", "Mohinder"));
1471
		storeManagerMap.put("mayankarora98133@gmail.com", Arrays.asList("", "Ankit", "Mohinder"));
1472
		storeManagerMap.put("babitaranirk@gmail.com", Arrays.asList("", "Ankit", "Mohinder"));
1473
		storeManagerMap.put("KK Enterprises", Arrays.asList("", "Dharmendar", "Mohinder"));
1474
		storeManagerMap.put("kambojanil83@gmail.com", Arrays.asList("Ajay", "Dharmendar", "Mohinder"));
1475
		storeManagerMap.put("robintelecom.snp@gmail.com", Arrays.asList("", "Dharmendar", "Mohinder"));
1476
		storeManagerMap.put("gtc01100@gmail.com", Arrays.asList("Ajay", "Dharmendar", "Mohinder"));
1477
		storeManagerMap.put("sahilnarang0009@gmail.com", Arrays.asList("Ajay", "Dharmendar", "Mohinder"));
1478
		storeManagerMap.put("metrofurniture342@gmail.com", Arrays.asList("Ajay", "Dharmendar", "Mohinder"));
1479
		storeManagerMap.put("omsonsindia08@gmail.com", Arrays.asList("Ajay", "Dharmendar", "Mohinder"));
1480
		storeManagerMap.put("sachinindri2006@gmail.com", Arrays.asList("Ajay", "Dharmendar", "Mohinder"));
1481
		storeManagerMap.put("smartdukaan.sonepat@gmail.com", Arrays.asList("", "Dharmendar", "Mohinder"));
1482
		storeManagerMap.put("sambhav350@gmail.com", Arrays.asList("Ajay", "Dharmendar", "Mohinder"));
1483
		storeManagerMap.put("talwarmukesh298@gmail.com", Arrays.asList("Ajay", "Dharmendar", "Mohinder"));
1484
		storeManagerMap.put("bhimsain919@gmail.com", Arrays.asList("", "Dharmendar", "Mohinder"));
1485
		storeManagerMap.put("rohitbatra106@gmail.com", Arrays.asList("Ajay", "Dharmendar", "Mohinder"));
1486
		storeManagerMap.put("thefonehousekarnal@gmail.com", Arrays.asList("", "Dharmendar", "Mohinder"));
1487
		storeManagerMap.put("mobileplanet7599@gmail.com", Arrays.asList("", "Dharmendar", "Mohinder"));
1488
		storeManagerMap.put("raghubir.ngh@gmail.com", Arrays.asList("Ajay", "Rajit", "Mohinder"));
1489
		storeManagerMap.put("saketnagpal@gmail.com", Arrays.asList("Ajay", "Rajit", "Mohinder"));
25312 amit.gupta 1490
		storeManagerMap.put("dharmendery079@gmail.com", Arrays.asList("Manoj", "", "Adeel"));
25509 tejbeer 1491
		storeManagerMap.put("sumittyagi1975@gmail.com", Arrays.asList("Manoj", "", "Adeel"));
25312 amit.gupta 1492
		storeManagerMap.put("deepak.lalwani1985@gmail.com", Arrays.asList("Manoj", "", "Adeel"));
25509 tejbeer 1493
		storeManagerMap.put("Priyankaenterprises9910@gmail.com", Arrays.asList("Manoj", "", "Adeel"));
25312 amit.gupta 1494
		storeManagerMap.put("richa9910763006@gmail.com", Arrays.asList("Manoj", "", "Adeel"));
1495
		storeManagerMap.put("lovelymobile183@gmail.com", Arrays.asList("Manoj", "", "Adeel"));
1496
		storeManagerMap.put("ajaykumarkansal03@gmail.com", Arrays.asList("Manoj", "", "Adeel"));
25509 tejbeer 1497
		storeManagerMap.put("gupta.smartdukaan@gmail.com", Arrays.asList("", "", "Adeel"));
1498
		storeManagerMap.put("smartenterprisespv@gmail.com", Arrays.asList("", "", "Adeel"));
1499
		storeManagerMap.put("ysinghal34@gmail.com", Arrays.asList("", "", "Adeel"));
1500
		storeManagerMap.put("dishatelecommars@gmail.com", Arrays.asList("", "", "Adeel"));
1501
		storeManagerMap.put("gulshersaifi74226@gmail.com", Arrays.asList("", "", "Adeel"));
1502
		storeManagerMap.put("mmtelecomsec16@gmail.com", Arrays.asList("", "", "Adeel"));
1503
		storeManagerMap.put("cachaitnya@gmail.com", Arrays.asList("", "", "Adeel"));
1504
		storeManagerMap.put("KHURANAMOBILE753@GMAIL.COM", Arrays.asList("Sohan", "Ankit", "Mohinder"));
1505
 
25312 amit.gupta 1506
	}
25503 amit.gupta 1507
 
25553 amit.gupta 1508
	public void grouping() throws Exception {
25503 amit.gupta 1509
		for (FofoStore fofoStore : fofoStoreRepository.selectAll()) {
25553 amit.gupta 1510
			/*LOGGER.info("{}, {}", fofoStore.getId(),
1511
					partnerTypeChangeService.getTypeOnDate(fofoStore.getId(), LocalDate.now().plusDays(1)));*/
25563 amit.gupta 1512
				UserWallet userWallet = userWalletRepository.selectByRetailerId(fofoStore.getId());
25558 amit.gupta 1513
				if(userWallet==null) continue;
25553 amit.gupta 1514
				System.out.printf("Store Code %s, Wallet amount %d, Sum amount %f%n", fofoStore.getCode(), userWallet.getAmount(), walletService.getWalletAmount(fofoStore.getId()));
25503 amit.gupta 1515
		}
1516
	}
24587 amit.gupta 1517
}