Subversion Repositories SmartDukaan

Rev

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