Subversion Repositories SmartDukaan

Rev

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