Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
23755 amit.gupta 1
package com.smartdukaan.cron;
23723 amit.gupta 2
 
28389 amit.gupta 3
import java.io.IOException;
27746 amit.gupta 4
import java.time.LocalDate;
27892 amit.gupta 5
import java.util.Arrays;
24174 govind 6
import java.util.List;
23906 amit.gupta 7
import java.util.Properties;
8
 
23723 amit.gupta 9
import org.apache.logging.log4j.LogManager;
10
import org.apache.logging.log4j.Logger;
28389 amit.gupta 11
import org.apache.velocity.app.VelocityEngine;
12
import org.apache.velocity.exception.VelocityException;
23898 amit.gupta 13
import org.springframework.beans.factory.annotation.Autowired;
14
import org.springframework.boot.ApplicationArguments;
15
import org.springframework.boot.ApplicationRunner;
23723 amit.gupta 16
import org.springframework.boot.WebApplicationType;
17
import org.springframework.boot.autoconfigure.SpringBootApplication;
18
import org.springframework.boot.builder.SpringApplicationBuilder;
19
import org.springframework.cache.annotation.EnableCaching;
20
import org.springframework.context.annotation.Bean;
21
import org.springframework.context.annotation.ComponentScan;
23935 amit.gupta 22
import org.springframework.context.annotation.Primary;
23723 amit.gupta 23
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
24
import org.springframework.core.io.ClassPathResource;
23906 amit.gupta 25
import org.springframework.mail.javamail.JavaMailSender;
26
import org.springframework.mail.javamail.JavaMailSenderImpl;
23723 amit.gupta 27
import org.springframework.scheduling.annotation.EnableScheduling;
28389 amit.gupta 28
import org.springframework.ui.velocity.VelocityEngineFactoryBean;
23723 amit.gupta 29
 
23898 amit.gupta 30
import com.smartdukaan.cron.migrations.RunOnceTasks;
27562 amit.gupta 31
import com.smartdukaan.cron.scheduled.InvestmentRelatedTasks;
24827 amit.gupta 32
import com.smartdukaan.cron.scheduled.Reconciliation;
25563 amit.gupta 33
import com.smartdukaan.cron.scheduled.ScheduledSkeleton;
23929 amit.gupta 34
import com.smartdukaan.cron.scheduled.ScheduledTasks;
27124 amit.gupta 35
import com.smartdukaan.cron.scheduled.TicketRelatedScheduledTask;
27007 amit.gupta 36
import com.smartdukaan.cron.scheduled.leadsync.LeadSyncRunner;
27077 amit.gupta 37
import com.spice.profitmandi.dao.enumuration.cs.EscalationType;
38
import com.spice.profitmandi.dao.repository.cs.CsService;
23724 amit.gupta 39
 
23723 amit.gupta 40
@SpringBootApplication
41
@EnableCaching
42
@EnableScheduling
23755 amit.gupta 43
@ComponentScan("com.smartdukaan.cron.*, com.spice.profitmandi.common.*")
24122 govind 44
public class Application implements ApplicationRunner {
45
 
46
	private static final Logger LOGGER = LogManager.getLogger(Application.class);
47
 
25563 amit.gupta 48
	@Autowired
27007 amit.gupta 49
	LeadSyncRunner leadSyncRunner;
27392 amit.gupta 50
 
27007 amit.gupta 51
	@Autowired
25563 amit.gupta 52
	private ScheduledSkeleton scheduledSkeleton;
27392 amit.gupta 53
 
27077 amit.gupta 54
	@Autowired
27124 amit.gupta 55
	private TicketRelatedScheduledTask ticketRelatedScheduledTask;
28368 tejbeer 56
 
27562 amit.gupta 57
	@Autowired
58
	private InvestmentRelatedTasks investmentRelatedTasks;
27392 amit.gupta 59
 
27124 amit.gupta 60
	@Autowired
27077 amit.gupta 61
	private CsService csService;
24603 amit.gupta 62
 
23723 amit.gupta 63
	public static void main(String[] args) throws Throwable {
23738 amit.gupta 64
		new SpringApplicationBuilder(Application.class).web(WebApplicationType.NONE).run(args);
23723 amit.gupta 65
	}
24122 govind 66
 
23723 amit.gupta 67
	@Bean
23738 amit.gupta 68
	public static PropertySourcesPlaceholderConfigurer propertyConfigurer1() {
23755 amit.gupta 69
		LOGGER.info("Called Configuration");
24122 govind 70
		PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
23723 amit.gupta 71
		propertySourcesPlaceholderConfigurer.setLocation(new ClassPathResource("/META-INF/env.properties"));
72
		return propertySourcesPlaceholderConfigurer;
73
	}
28389 amit.gupta 74
 
24122 govind 75
 
28389 amit.gupta 76
	@Bean(name = "veloctyEngine")
77
	public VelocityEngine velocityEngine() throws VelocityException, IOException {
78
		VelocityEngineFactoryBean factory = new VelocityEngineFactoryBean();
79
		// Properties props = new Properties();
80
		// props.put("resource.loader", "file");
81
 
82
		// props.put("file.resource.loader.description", "Velocity File Resource
83
		// Loader");
84
		// props.put("file.resource.loader.class",
85
		// "org.apache.velocity.runtime.resource.loader.FileResourceLoader");
86
		// props.put("file.resource.loader.cache", true);
87
		// props.put("file.resource.loader.path", ".");
88
 
89
		Properties velocityProperties = new Properties();
90
		velocityProperties.put("resource.loader", "class");
91
		velocityProperties.put("class.resource.loader.class",
92
				"org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
93
		velocityProperties.put("file.resource.loader.cache", true);
94
		velocityProperties.put("file.resource.loader.unicode", true);
95
		velocityProperties.put("input.encoding", "UTF-8");
96
		velocityProperties.put("output.encoding", "UTF-8");
97
		velocityProperties.put("overrideLogging", true);
98
 
99
	//	velocityProperties.put("file.resource.loader.path", ".");
100
 
101
		factory.setVelocityProperties(velocityProperties);
102
 
103
		return factory.createVelocityEngine();
104
 
105
	}
106
 
24122 govind 107
	@Bean(name = "mailSender")
23935 amit.gupta 108
	@Primary
24122 govind 109
	public JavaMailSender sendGridMailSender() {
110
		JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
23723 amit.gupta 111
 
24122 govind 112
		// Using gmail
113
		mailSender.setHost("smtp.sendgrid.net");
114
		mailSender.setPort(587);
27630 amit.gupta 115
		mailSender.setUsername("apikey");
116
		mailSender.setPassword("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");
24122 govind 117
 
118
		Properties javaMailProperties = new Properties();
119
		javaMailProperties.put("mail.smtp.starttls.enable", "false");
120
		javaMailProperties.put("mail.smtp.auth", "true");
121
		javaMailProperties.put("mail.transport.protocol", "smtp");
24603 amit.gupta 122
		// javaMailProperties.put("mail.debug", "true");// Prints out everything on
123
		// screen
24122 govind 124
 
125
		mailSender.setJavaMailProperties(javaMailProperties);
126
		return mailSender;
127
	}
128
 
23935 amit.gupta 129
	@Bean
24122 govind 130
	public JavaMailSender googleMailSender() {
23935 amit.gupta 131
		JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
24122 govind 132
		// Using gmail
23935 amit.gupta 133
		mailSender.setHost("smtp.gmail.com");
134
		mailSender.setPort(587);
135
		mailSender.setUsername("build@shop2020.in");
136
		mailSender.setPassword("cafe@nes");
24122 govind 137
 
23935 amit.gupta 138
		Properties javaMailProperties = new Properties();
139
		javaMailProperties.put("mail.smtp.starttls.enable", "true");
140
		javaMailProperties.put("mail.smtp.auth", "true");
141
		javaMailProperties.put("mail.transport.protocol", "smtp");
24122 govind 142
		javaMailProperties.put("mail.debug", "true");// Prints out everything on screen
23935 amit.gupta 143
		mailSender.setJavaMailProperties(javaMailProperties);
144
		return mailSender;
145
	}
146
 
24122 govind 147
	@Autowired
23898 amit.gupta 148
	private RunOnceTasks runOnceTasks;
24122 govind 149
 
150
	@Autowired
23929 amit.gupta 151
	private ScheduledTasks scheduledTasks;
24848 amit.gupta 152
 
24827 amit.gupta 153
	@Autowired
154
	private Reconciliation reconciliation;
24122 govind 155
 
23898 amit.gupta 156
	@Override
157
	public void run(ApplicationArguments args) throws Exception {
158
		LOGGER.info("Called run method");
25694 amit.gupta 159
		if (args.containsOption("tc")) {
25842 amit.gupta 160
			System.out.println("Toffee service called");
27692 amit.gupta 161
			scheduledTasks.attachToffeeInvoices();
25694 amit.gupta 162
			System.exit(0);
163
		}
27457 tejbeer 164
		/*
165
		 * if (args.containsOption("migratetax")) { System.out.println("migratetax");
166
		 * scheduledTasks.migrateTax(); System.exit(0); }
167
		 */
27272 amit.gupta 168
		if (args.containsOption("rw")) {
169
			System.out.println("Reverse wallet");
170
			scheduledTasks.reverseWallet();
171
			System.exit(0);
172
		}
27720 amit.gupta 173
		if (args.containsOption("addHdfcPayment")) {
174
			runOnceTasks.addPayment();
175
			System.exit(0);
176
		}
27431 amit.gupta 177
		if (args.containsOption("processSchemeOut")) {
178
			System.out.println("Process schemeOut");
179
			int orderId = Integer.parseInt(args.getOptionValues("orderid").get(0));
180
			int fofoId = Integer.parseInt(args.getOptionValues("fofoid").get(0));
181
			runOnceTasks.processSchemeOut(fofoId, orderId);
182
			System.exit(0);
183
		}
27124 amit.gupta 184
		if (args.containsOption("at")) {
185
			System.out.println("Toffee service called");
186
			ticketRelatedScheduledTask.alertforTicket();
187
			System.exit(0);
188
		}
189
		if (args.containsOption("et")) {
27392 amit.gupta 190
			ticketRelatedScheduledTask.escalateTicket();
191
			;
27124 amit.gupta 192
			System.exit(0);
193
		}
26291 tejbeer 194
		if (args.containsOption("sr")) {
25694 amit.gupta 195
			List<String> schemeIds = args.getOptionValues("schemeId");
25697 amit.gupta 196
			System.out.println(schemeIds);
25694 amit.gupta 197
			scheduledTasks.schemeRollback(schemeIds);
25695 amit.gupta 198
			System.exit(0);
25694 amit.gupta 199
		}
27437 amit.gupta 200
		if (args.containsOption("processActivation")) {
201
			scheduledTasks.processActivation();
202
			System.exit(0);
203
		}
28368 tejbeer 204
 
205
		if (args.containsOption("checkRazorPayPaymentStatus")) {
206
			scheduledTasks.checkRazorPayPaymentStatus();
207
			System.exit(0);
208
		}
25503 amit.gupta 209
		if (args.containsOption("grouping")) {
210
			scheduledTasks.grouping();
211
			System.exit(0);
212
		}
25530 amit.gupta 213
		if (args.containsOption("fixWallet")) {
214
			runOnceTasks.fixWallet();
215
			System.exit(0);
216
		}
25312 amit.gupta 217
		if (args.containsOption("reconcileExpiredFixedSchemes")) {
25073 amit.gupta 218
			reconciliation.reconcileExpiredFixedSchemes();
219
			System.exit(0);
220
		}
27746 amit.gupta 221
		if (args.containsOption("dailyReconciliation")) {
28207 tejbeer 222
			if (args.containsOption("date")) {
27746 amit.gupta 223
				LocalDate date = LocalDate.parse(args.getOptionValues("date").get(0));
224
				reconciliation.dailyReconciliation(date);
225
			} else {
226
				reconciliation.dailyReconciliation(LocalDate.now().minusDays(1));
227
			}
228
			System.exit(0);
229
		}
26291 tejbeer 230
		/*
231
		 * if (args.containsOption("test")) { schemeService.processSchemeIn(9243,
232
		 * 175138102); throw new Exception(); }
233
		 */
25073 amit.gupta 234
		if (args.containsOption("fixSchemePayouts")) {
235
 
25029 amit.gupta 236
			runOnceTasks.fixSchemePayouts();
237
			System.exit(0);
238
		}
25312 amit.gupta 239
		if (args.containsOption("sendNotification")) {
25300 tejbeer 240
			scheduledTasks.sendNotification();
241
			System.exit(0);
242
		}
25721 tejbeer 243
 
26291 tejbeer 244
		if (args.containsOption("ticketClosed")) {
245
			scheduledTasks.ticketClosed();
246
			System.exit(0);
247
		}
248
 
25721 tejbeer 249
		if (args.containsOption("checkfocusedModelInPartnerStock")) {
250
			scheduledTasks.checkfocusedModelInPartnerStock();
251
			System.exit(0);
252
		}
28207 tejbeer 253
 
254
		if (args.containsOption("partnerProblemAlert")) {
255
			scheduledTasks.partnerProblemAlert();
256
			System.exit(0);
257
		}
25022 amit.gupta 258
		if (args.containsOption("populateSchemes")) {
259
			runOnceTasks.populateSchemes();
260
			System.exit(0);
261
		}
24855 amit.gupta 262
		if (args.containsOption("notify")) {
25073 amit.gupta 263
			if (args.containsOption("fofoId")) {
24988 tejbeer 264
				int fofoId = Integer.parseInt(args.getOptionValues("fofoId").get(0));
25837 amit.gupta 265
				scheduledTasks.sendDailySalesNotificationToPartner(fofoId);
24988 tejbeer 266
			}
24855 amit.gupta 267
			System.exit(0);
268
		}
24955 amit.gupta 269
		if (args.containsOption("findMismatchesInIndent")) {
270
			runOnceTasks.findMismatchesInIndent();
271
			System.exit(0);
272
		}
27222 amit.gupta 273
		if (args.containsOption("ppl")) {
274
			runOnceTasks.printPendingLeads();
275
			System.exit(0);
276
		}
24862 amit.gupta 277
		if (args.containsOption("notifyAll")) {
25837 amit.gupta 278
			scheduledTasks.sendDailySalesNotificationToPartner(null);
24862 amit.gupta 279
			System.exit(0);
280
		}
25029 amit.gupta 281
		if (args.containsOption("OutSchemeReco")) {
25073 amit.gupta 282
			scheduledTasks.dryRunOutSchemeReco();
27252 amit.gupta 283
			// runOnceTasks.migrateChallansToInvoices();
284
			// reconciliation.dailyReconciliation();
285
			System.exit(0);
286
		}
287
		if (args.containsOption("dryRunSchemeReco")) {
288
			scheduledTasks.dryRunSchemeReco();
289
			// runOnceTasks.migrateChallansToInvoices();
290
			// reconciliation.dailyReconciliation();
291
			System.exit(0);
292
		}
293
		if (args.containsOption("OutReco1")) {
294
			scheduledTasks.dryRunSchemeOutReco1();
295
			System.exit(0);
296
		}
297
		if (args.containsOption("once")) {
24122 govind 298
			if (args.containsOption("1")) {
24603 amit.gupta 299
				if (args.containsOption("test")) {
24271 amit.gupta 300
					scheduledTasks.sendPartnerInvestmentDetails(args.getOptionValues("email"));
24272 amit.gupta 301
				} else {
27751 amit.gupta 302
					System.out.println("Called sendPartnerInvestmentDetails");
25563 amit.gupta 303
					scheduledSkeleton.sendPartnerInvestmentDetails();
24271 amit.gupta 304
				}
24122 govind 305
				System.exit(0);
306
			}
24682 amit.gupta 307
			if (args.containsOption("2")) {
24696 amit.gupta 308
				if (args.containsOption("test")) {
24848 amit.gupta 309
					String[] emails = new String[args.getOptionValues("email").size()];
24696 amit.gupta 310
					scheduledTasks.sendAgeingReport(args.getOptionValues("email").toArray(emails));
311
				} else {
312
					scheduledTasks.sendAgeingReport();
313
				}
24682 amit.gupta 314
				System.exit(0);
315
			}
24151 amit.gupta 316
			if (args.containsOption("3")) {
24603 amit.gupta 317
				if (args.getOptionNames().contains("offset")) {
24461 amit.gupta 318
					int offset = Integer.parseInt(args.getOptionValues("offset").get(0));
24603 amit.gupta 319
					if (args.getOptionNames().contains("days")) {
24461 amit.gupta 320
						int durationDays = Integer.parseInt(args.getOptionValues("days").get(0));
25586 amit.gupta 321
						scheduledTasks.processScheme(offset, durationDays, args.containsOption("dryRun"));
24461 amit.gupta 322
					} else {
25586 amit.gupta 323
						scheduledTasks.processScheme(offset, args.containsOption("dryRun"));
24461 amit.gupta 324
					}
24560 amit.gupta 325
				} else if (args.containsOption("catalogid")) {
24603 amit.gupta 326
					// scheduledTasks.processSchemeForModel(args.getOptionValues("catalogid").get(0));
24461 amit.gupta 327
				} else {
25586 amit.gupta 328
					scheduledTasks.processScheme(args.containsOption("dryRun"));
24461 amit.gupta 329
				}
24151 amit.gupta 330
				System.exit(0);
331
			}
24238 amit.gupta 332
			if (args.containsOption("4")) {
24241 amit.gupta 333
				scheduledTasks.evaluateExcessSchemeOut();
24256 amit.gupta 334
			}
335
			if (args.containsOption("5")) {
336
				int offset = Integer.parseInt(args.getOptionValues("offset").get(0));
25586 amit.gupta 337
				scheduledTasks.processScheme(offset, args.containsOption("dryRun"));
24238 amit.gupta 338
				System.exit(0);
339
			}
24603 amit.gupta 340
			if (args.containsOption("cancelOrder")) {
24265 amit.gupta 341
				List<String> invoiceNumbers = args.getOptionValues("invoiceNumber");
342
				runOnceTasks.cancelOrder(invoiceNumbers);
343
			}
24641 amit.gupta 344
			if (args.containsOption("migratePurchase")) {
345
				runOnceTasks.migratePurchase();
346
			}
24603 amit.gupta 347
			if (args.containsOption("migratepd")) {
24431 amit.gupta 348
				scheduledTasks.moveImeisToPriceDropImeis();
349
			}
24603 amit.gupta 350
			if (args.containsOption("walletmismatch")) {
24542 amit.gupta 351
				scheduledTasks.walletmismatch();
352
			}
24603 amit.gupta 353
			if (args.containsOption("schemewalletmismatch")) {
24580 amit.gupta 354
				scheduledTasks.schemewalletmismatch();
355
			}
24603 amit.gupta 356
			if (args.containsOption("gst")) {
24542 amit.gupta 357
				scheduledTasks.gst();
358
			}
26291 tejbeer 359
			if (args.containsOption("mailDashboardScreenshots")) {
25751 amit.gupta 360
				runOnceTasks.mailDashboardScreenshots();
361
			}
26291 tejbeer 362
			if (args.containsOption("notifyLead")) {
25942 amit.gupta 363
				scheduledTasks.notifyLead();
25940 amit.gupta 364
				scheduledTasks.notifyVisits();
25927 amit.gupta 365
			}
26291 tejbeer 366
			if (args.containsOption("fixgrn")) {
26092 amit.gupta 367
				runOnceTasks.fixGrn();
368
			}
26291 tejbeer 369
			if (args.containsOption("pbfix")) {
26033 amit.gupta 370
				runOnceTasks.pbfix();
371
			}
26579 amit.gupta 372
			if (args.containsOption("mongom")) {
373
				runOnceTasks.mongom();
374
			}
26797 amit.gupta 375
			if (args.containsOption("processPd")) {
376
				int priceDropId = Integer.parseInt(args.getOptionValues("processPd").get(0));
377
				runOnceTasks.processPd(priceDropId);
378
			}
26291 tejbeer 379
			if (args.containsOption("samsung")) {
27392 amit.gupta 380
				if (args.containsOption("ym")) {
26408 amit.gupta 381
					int ym = Integer.parseInt(args.getOptionValues("ym").get(0));
382
					runOnceTasks.fetchImeiActivation(ym);
383
				}
384
				runOnceTasks.fetchImeiActivation(0);
26214 amit.gupta 385
			}
26291 tejbeer 386
			if (args.containsOption("fixdupimeigrn")) {
26265 amit.gupta 387
				runOnceTasks.fixDupGrns();
388
			}
27392 amit.gupta 389
			if (args.containsOption("cancel")) {
26759 amit.gupta 390
				runOnceTasks.cancelDn(args.getOptionValues("dn").get(0));
391
			}
27392 amit.gupta 392
			if (args.containsOption("fixScheme")) {
26929 amit.gupta 393
				runOnceTasks.fixScheme();
394
			}
27392 amit.gupta 395
			if (args.containsOption("syncLeads")) {
27007 amit.gupta 396
				leadSyncRunner.syncLeads();
397
			}
27392 amit.gupta 398
			if (args.containsOption("testCs")) {
27077 amit.gupta 399
				int category = Integer.parseInt(args.getOptionValues("category").get(0));
400
				EscalationType escalationType = EscalationType.valueOf(args.getOptionValues("escalation").get(0));
401
				int fofoId = Integer.parseInt(args.getOptionValues("fofoid").get(0));
402
				csService.getAuthUserId(category, escalationType, fofoId);
403
			}
27392 amit.gupta 404
			if (args.containsOption("duporder")) {
27279 amit.gupta 405
				runOnceTasks.removeDuplicateOrders();
406
			}
27511 amit.gupta 407
			if (args.containsOption("createDummyInvoices")) {
408
				runOnceTasks.createDummyInvoices();
409
			}
27392 amit.gupta 410
 
27450 tejbeer 411
			if (args.containsOption("createGeofence")) {
412
				runOnceTasks.createGeofence();
413
			}
414
			if (args.containsOption("getAllGeofences")) {
415
				runOnceTasks.getAllGeofences();
416
			}
27562 amit.gupta 417
			if (args.containsOption("payMonthlyInvestment")) {
418
				investmentRelatedTasks.payMonthlyInvestment();
419
			}
28531 amit.gupta 420
			if (args.containsOption("evaluateActualInvestmentPayout")) {
421
				investmentRelatedTasks.evaluateActualInvestmentPayout();
422
			}
27457 tejbeer 423
			if (args.containsOption("deleteGeofences")) {
424
				List<String> geofenceIds = args.getOptionValues("geofenceId");
425
				runOnceTasks.deleteGeofences(geofenceIds);
426
			}
27948 amit.gupta 427
			if (args.containsOption("createOffers")) {
28207 tejbeer 428
				if (args.containsOption("offerId")) {
27948 amit.gupta 429
					int offerId = Integer.parseInt(args.getOptionValues("offerId").get(0));
430
					runOnceTasks.createOffers(offerId);
431
				}
432
			}
28207 tejbeer 433
			if (args.containsOption("schemeout")) {
434
				if (args.containsOption("invoices")) {
27892 amit.gupta 435
					String invoicesString = args.getOptionValues("invoices").get(0);
436
					List<String> invoices = Arrays.asList(invoicesString.split(","));
437
					scheduledTasks.processSchemeOut(invoices);
438
				}
439
			}
28207 tejbeer 440
			if (args.containsOption("schemein")) {
441
				if (args.containsOption("invoices")) {
27987 amit.gupta 442
					String invoicesString = args.getOptionValues("invoices").get(0);
443
					List<String> invoices = Arrays.asList(invoicesString.split(","));
444
					scheduledTasks.processSchemeIn(invoices);
445
				}
446
			}
28207 tejbeer 447
 
448
			if (args.containsOption("fixScans")) {
28038 amit.gupta 449
				runOnceTasks.fixScans();
450
			}
28558 amit.gupta 451
 
28622 amit.gupta 452
			if (args.containsOption("reverseMaa")) {
453
				runOnceTasks.reverseMaa();
454
			}
455
 
28558 amit.gupta 456
			if (args.containsOption("fixOffer")) {
457
				runOnceTasks.fixOffer();
458
			}
24265 amit.gupta 459
			System.exit(0);
23898 amit.gupta 460
		}
461
	}
24603 amit.gupta 462
 
24848 amit.gupta 463
}