Subversion Repositories SmartDukaan

Rev

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

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