Subversion Repositories SmartDukaan

Rev

Rev 37617 | Rev 37636 | 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
 
32782 raveendra. 3
import com.smartdukaan.cron.migrations.RunOnceTasks;
37613 amit 4
import com.smartdukaan.cron.migrations.InternalGrnTask;
32782 raveendra. 5
import com.smartdukaan.cron.scheduled.*;
6
import com.smartdukaan.cron.scheduled.b2b.Listing;
36745 ranu 7
import com.smartdukaan.cron.scheduled.beatmiss.BeatMissDetectorRunner;
32782 raveendra. 8
import com.smartdukaan.cron.scheduled.leadsync.LeadSyncRunner;
32831 amit.gupta 9
import com.smartdukaan.cron.scheduled.ordertracking.OrderTrackingService;
33274 amit.gupta 10
import com.smartdukaan.cron.scheduled.purchaseorder.POScheduler;
34860 ranu 11
import com.smartdukaan.cron.scheduled.razorpay.FetchPartnersDisbursementTask;
36058 ranu 12
import com.smartdukaan.cron.scheduled.knowlarity.KnowlarityCallMonitorScheduler;
13
import com.spice.profitmandi.common.model.InvoicePdfModel;
34443 vikas.jang 14
import com.spice.profitmandi.common.model.ProfitMandiConstants;
32782 raveendra. 15
import com.spice.profitmandi.dao.enumuration.cs.EscalationType;
16
import com.spice.profitmandi.dao.repository.cs.CsService;
17
import com.spice.profitmandi.dao.repository.fofo.FofoOrderItemRepository;
36035 amit 18
import com.spice.profitmandi.dao.service.shopify.ShopifyProductSyncService;
32782 raveendra. 19
import com.spice.profitmandi.dao.util.ContentPojoPopulator;
37499 ranu 20
import com.spice.profitmandi.service.NotificationService;
21
import com.spice.profitmandi.service.integrations.icicilombard.IciciLombardService;
22
import com.spice.profitmandi.service.integrations.icicilombard.model.LastTransactionsResponseModel;
32782 raveendra. 23
import com.spice.profitmandi.service.integrations.samsung.upgradeoffer.UpgradeOfferService;
36063 ranu 24
import com.spice.profitmandi.service.mail.MailOutboxService;
23723 amit.gupta 25
import org.apache.logging.log4j.LogManager;
26
import org.apache.logging.log4j.Logger;
28389 amit.gupta 27
import org.apache.velocity.app.VelocityEngine;
28
import org.apache.velocity.exception.VelocityException;
23898 amit.gupta 29
import org.springframework.beans.factory.annotation.Autowired;
30
import org.springframework.boot.ApplicationArguments;
31
import org.springframework.boot.ApplicationRunner;
23723 amit.gupta 32
import org.springframework.boot.WebApplicationType;
33
import org.springframework.boot.autoconfigure.SpringBootApplication;
34
import org.springframework.boot.builder.SpringApplicationBuilder;
35
import org.springframework.context.annotation.Bean;
36
import org.springframework.context.annotation.ComponentScan;
37631 amit 37
import org.springframework.context.annotation.Lazy;
34554 tejus.loha 38
import org.springframework.context.annotation.EnableAspectJAutoProxy;
23935 amit.gupta 39
import org.springframework.context.annotation.Primary;
23723 amit.gupta 40
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
41
import org.springframework.core.io.ClassPathResource;
35393 amit 42
import org.springframework.core.io.Resource;
23906 amit.gupta 43
import org.springframework.mail.javamail.JavaMailSender;
37453 amit 44
import com.spice.profitmandi.common.services.AuthenticatedIdentityMailSender;
37631 amit 45
import com.spice.profitmandi.common.services.MailRecipientFilter;
46
import com.spice.profitmandi.common.services.RecipientFilteringMailSender;
23906 amit.gupta 47
import org.springframework.mail.javamail.JavaMailSenderImpl;
28389 amit.gupta 48
import org.springframework.ui.velocity.VelocityEngineFactoryBean;
23723 amit.gupta 49
 
32782 raveendra. 50
import java.io.FileInputStream;
51
import java.io.IOException;
52
import java.time.LocalDate;
37058 amit 53
import java.time.LocalDateTime;
32782 raveendra. 54
import java.time.YearMonth;
55
import java.util.ArrayList;
56
import java.util.Arrays;
57
import java.util.List;
58
import java.util.Properties;
59
import java.util.stream.Collectors;
23724 amit.gupta 60
 
23723 amit.gupta 61
@SpringBootApplication
34554 tejus.loha 62
@EnableAspectJAutoProxy
23755 amit.gupta 63
@ComponentScan("com.smartdukaan.cron.*, com.spice.profitmandi.common.*")
24122 govind 64
public class Application implements ApplicationRunner {
65
 
31753 tejbeer 66
    private static final Logger LOGGER = LogManager.getLogger(Application.class);
24122 govind 67
 
31753 tejbeer 68
    @Autowired
69
    LeadSyncRunner leadSyncRunner;
30120 amit.gupta 70
 
31753 tejbeer 71
    @Autowired
72
    StandAlone standAlone;
30209 amit.gupta 73
 
31753 tejbeer 74
    @Autowired
75
    UpgradeOfferService upgradeOfferService;
27392 amit.gupta 76
 
31753 tejbeer 77
    @Autowired
78
    private TicketRelatedScheduledTask ticketRelatedScheduledTask;
28368 tejbeer 79
 
31753 tejbeer 80
    @Autowired
81
    private OnBoardingRelatedSchelduleTask onBoardingRelatedSchelduleTask;
28921 tejbeer 82
 
31753 tejbeer 83
    @Autowired
84
    private InvestmentRelatedTasks investmentRelatedTasks;
27392 amit.gupta 85
 
31753 tejbeer 86
    @Autowired
87
    private CsService csService;
29814 tejbeer 88
 
31753 tejbeer 89
    @Autowired
90
    private FofoOrderItemRepository fofoOrderItemRepository;
24603 amit.gupta 91
 
31753 tejbeer 92
    @Autowired
93
    private ContentPojoPopulator contentPojoPopulator;
29361 tejbeer 94
 
31753 tejbeer 95
    @Autowired
96
    private Listing listing;
24122 govind 97
 
32831 amit.gupta 98
    @Autowired
99
    OrderTrackingService orderTrackingService;
100
 
36306 amit 101
    @Autowired
102
    BatchScheduledTasks batchScheduledTasks;
103
 
36745 ranu 104
    @Autowired
105
    private BeatMissDetectorRunner beatMissDetectorRunner;
106
 
37499 ranu 107
    @Autowired
108
    private IciciLombardService iciciLombardService;
109
 
31753 tejbeer 110
    public static void main(String[] args) throws Throwable {
111
        try {
35803 amit 112
            WebApplicationType webType = WebApplicationType.SERVLET;
113
            for (String arg : args) {
114
                if (arg.contains("spring.main.web-application-type=none")) {
115
                    webType = WebApplicationType.NONE;
116
                    break;
117
                }
118
            }
119
            new SpringApplicationBuilder(Application.class)
120
                    .web(webType)
121
                    .run(args);
31753 tejbeer 122
        } catch (Throwable t) {
123
            t.printStackTrace();
124
        }
125
    }
28389 amit.gupta 126
 
31753 tejbeer 127
    @Bean
128
    public static PropertySourcesPlaceholderConfigurer propertyConfigurer1() {
129
        LOGGER.info("Called Configuration");
130
        PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
35393 amit 131
 
35832 amit 132
        String activeProfile;
133
        Properties properties = new Properties();
134
        try {
135
            properties.load(Application.class.getClassLoader().getResourceAsStream("META-INF/env.property"));
136
        } catch (IOException e) {
137
            LOGGER.error("Error reading env.property, defaulting to dev: " + e);
138
            properties.put("profile", "dev");
139
        }
140
        activeProfile = (String) properties.get("profile");
35393 amit 141
 
35832 amit 142
        Resource appResource;
143
        Resource sharedResource;
144
 
145
        if ("prod".equals(activeProfile)) {
146
            appResource = new ClassPathResource("/META-INF/prod.properties");
147
            sharedResource = new ClassPathResource("/shared-prod.properties");
148
        } else if ("staging".equals(activeProfile)) {
149
            appResource = new ClassPathResource("/META-INF/staging.properties");
150
            sharedResource = new ClassPathResource("/shared-staging.properties");
151
        } else {
152
            appResource = new ClassPathResource("/META-INF/dev.properties");
153
            sharedResource = new ClassPathResource("/shared-dev.properties");
154
        }
155
 
156
        LOGGER.info("Cron loading profile: " + activeProfile);
157
        propertySourcesPlaceholderConfigurer.setLocations(sharedResource, appResource);
35393 amit 158
        propertySourcesPlaceholderConfigurer.setIgnoreResourceNotFound(true);
159
 
31753 tejbeer 160
        return propertySourcesPlaceholderConfigurer;
161
    }
28389 amit.gupta 162
 
31753 tejbeer 163
    @Bean(name = "veloctyEngine")
164
    public VelocityEngine velocityEngine() throws VelocityException, IOException {
165
        VelocityEngineFactoryBean factory = new VelocityEngineFactoryBean();
28389 amit.gupta 166
 
31753 tejbeer 167
        Properties velocityProperties = new Properties();
168
        velocityProperties.put("resource.loader", "class");
169
        velocityProperties.put("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
170
        velocityProperties.put("file.resource.loader.cache", true);
171
        velocityProperties.put("file.resource.loader.unicode", true);
172
        velocityProperties.put("input.encoding", "UTF-8");
173
        velocityProperties.put("output.encoding", "UTF-8");
174
        velocityProperties.put("response.encoding", "UTF-8");
175
        velocityProperties.put("overrideLogging", true);
28389 amit.gupta 176
 
31753 tejbeer 177
        // velocityProperties.put("file.resource.loader.path", ".");
28389 amit.gupta 178
 
31753 tejbeer 179
        factory.setVelocityProperties(velocityProperties);
28389 amit.gupta 180
 
31753 tejbeer 181
        return factory.createVelocityEngine();
23723 amit.gupta 182
 
31753 tejbeer 183
    }
24122 govind 184
 
37474 amit 185
    /**
186
     * The default sender. Authenticates as sdtech@smartdukaan.com and rewrites
187
     * every From to that identity — Workspace binds an authenticated session to
188
     * one address and rejects any other with
189
     * "535 Authorization failed: Authenticated user is not authorized to send mail".
190
     *
191
     * Also answers to "mailSender" so the many unqualified JavaMailSender
192
     * injections resolve here rather than needing to be touched.
193
     */
37479 amit 194
    @Bean(name = "googleMailSender")
37631 amit 195
    public JavaMailSender googleMailSender(@Lazy MailRecipientFilter mailRecipientFilter) {
196
        AuthenticatedIdentityMailSender mailSender = new AuthenticatedIdentityMailSender();
197
        mailSender.setRecipientFilter(mailRecipientFilter);
34612 ranu 198
        mailSender.setHost("smtp.gmail.com");
199
        mailSender.setPort(465);
200
        mailSender.setUsername("sdtech@smartdukaan.com");
37369 amit 201
        mailSender.setPassword("wbdwyqrcgosrkwdn"); // App Password
34612 ranu 202
 
203
        Properties props = mailSender.getJavaMailProperties();
204
        props.put("mail.smtp.auth", "true");
205
        props.put("mail.smtp.ssl.enable", "true");
206
        props.put("mail.smtp.ssl.trust", "smtp.gmail.com");
207
        props.put("mail.smtp.socketFactory.port", "465");
208
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
37368 amit 209
        props.put("mail.smtp.connectiontimeout", "30000");
210
        props.put("mail.smtp.timeout", "120000");
211
        props.put("mail.smtp.writetimeout", "120000");
34612 ranu 212
 
213
        return mailSender;
214
    }
215
 
37479 amit 216
    /**
217
     * The default sender.
218
     *
219
     * Verified working 2026-08-31: MAIL FROM:<noreply@smartdukaan.com> returns 250
220
     * over IPv4. It does not authenticate -- Workspace authorises it by allowlisted
221
     * source IP -- so it may legitimately send as noreply@.
222
     *
37480 amit 223
     * googleMailSender is the alternative and its credentials are valid -- verified
224
     * 2026-08-31, AUTH OK on both 465 and 587. Use it by qualifier where a message
225
     * must come from the authenticated identity rather than noreply@.
37479 amit 226
     *
37480 amit 227
     * SMTP on this host works over IPv4 only, and that is not specific to the relay:
228
     * over IPv6 the relay answers "550 5.7.1 Invalid credentials for relay" and
229
     * smtp.gmail.com rejects a valid app password with "535 5.7.8 Username and
230
     * Password not accepted". The JVM prefers IPv4, which is the only reason mail
231
     * leaves this box at all. Anything that prefers IPv6 will fail on both paths.
37479 amit 232
     */
233
    @Bean(name = {"gmailRelaySender", "mailSender"})
234
    @Primary
37631 amit 235
    public JavaMailSender getGmailRelaySender(@Lazy MailRecipientFilter mailRecipientFilter) {
236
        RecipientFilteringMailSender mailSender = new RecipientFilteringMailSender();
237
        mailSender.setRecipientFilter(mailRecipientFilter);
36248 amit 238
        mailSender.setHost("smtp-relay.gmail.com");
239
        mailSender.setPort(587);
240
 
241
        Properties props = mailSender.getJavaMailProperties();
242
        props.put("mail.smtp.starttls.enable", "true");
243
        props.put("mail.smtp.auth", "false");
244
        props.put("mail.smtp.localhost", "smartdukaan.com");
245
        props.put("mail.smtp.ssl.protocols", "TLSv1.2");
246
        props.put("mail.smtp.ssl.trust", "smtp-relay.gmail.com");
247
        props.put("mail.transport.protocol", "smtp");
37368 amit 248
        props.put("mail.smtp.connectiontimeout", "30000");
249
        props.put("mail.smtp.timeout", "120000");
250
        props.put("mail.smtp.writetimeout", "120000");
36248 amit 251
 
252
        return mailSender;
253
    }
254
 
31753 tejbeer 255
    @Autowired
256
    private RunOnceTasks runOnceTasks;
24122 govind 257
 
31753 tejbeer 258
    @Autowired
37613 amit 259
    private InternalGrnTask internalGrnTask;
260
 
261
    @Autowired
31753 tejbeer 262
    private ScheduledTasks scheduledTasks;
30335 amit.gupta 263
 
31753 tejbeer 264
    @Autowired
34306 ranu 265
    private ScheduledTasksTest scheduledTasksTest;
266
 
267
    @Autowired
34860 ranu 268
    private FetchPartnersDisbursementTask fetchPartnersDisbursementTask;
269
 
270
    @Autowired
31753 tejbeer 271
    private Reconciliation reconciliation;
30309 amit.gupta 272
 
31753 tejbeer 273
    @Autowired
36511 amit 274
    private WarehouseStockReconciliation warehouseStockReconciliation;
275
 
276
    @Autowired
37159 amit 277
    private PartnerIdentityIntegrityMonitor partnerIdentityIntegrityMonitor;
278
 
279
    @Autowired
35250 amit 280
    private Migrations migrations;
281
 
282
    @Autowired
31753 tejbeer 283
    CaptchaService captchaService;
28921 tejbeer 284
 
33274 amit.gupta 285
    @Autowired
286
    POScheduler poScheduler;
32878 amit.gupta 287
 
35929 vikas 288
    @Autowired
289
    ShopifyProductSyncService shopifyProductSyncService;
33274 amit.gupta 290
 
36058 ranu 291
    @Autowired
292
    KnowlarityCallMonitorScheduler knowlarityCallMonitorScheduler;
35929 vikas 293
 
36063 ranu 294
    @Autowired
295
    MailOutboxService mailOutboxService;
296
 
37499 ranu 297
    @Autowired
298
    NotificationService notificationService;
299
 
31753 tejbeer 300
    @Override
301
    public void run(ApplicationArguments args) throws Exception {
32008 amit.gupta 302
        //scheduledTasks.test();
303
        //System.exit();
31753 tejbeer 304
        LOGGER.info("Called run method");
36058 ranu 305
 
306
        // Knowlarity Call Monitor - Manual trigger (if 10 AM scheduled start was missed)
307
        // This just starts the monitor; scheduled healthCheck and stopMonitoring will still work
308
        if (args.containsOption("startKnowlarityMonitor")) {
309
            LOGGER.info("Starting Knowlarity Call Monitor manually...");
310
            knowlarityCallMonitorScheduler.startMonitoring();
311
            LOGGER.info("Knowlarity Call Monitor started. Scheduled tasks will handle health checks and 10 PM stop.");
312
            // No sleep needed - Spring scheduler keeps app running and handles 10 PM stop
313
        }
36545 ranu 314
        if (args.containsOption("trackingReport")) {
315
            runOnceTasks.dailyTrackingReport();
316
        }
36058 ranu 317
        if (args.containsOption("stopKnowlarityMonitor")) {
318
            LOGGER.info("Stopping Knowlarity Call Monitor...");
319
            knowlarityCallMonitorScheduler.stopMonitoring();
320
        }
36115 ranu 321
        // Knowlarity - Request fresh snapshot manually (when status not updating)
322
        if (args.containsOption("refreshKnowlaritySnapshot")) {
323
            LOGGER.info("Requesting Knowlarity snapshot manually...");
324
            knowlarityCallMonitorScheduler.healthCheck();
325
            LOGGER.info("Knowlarity snapshot requested.");
326
            System.exit(0);
327
        }
36058 ranu 328
 
33260 amit.gupta 329
        if (args.containsOption("removePartialBillingForTransaction")) {
330
            if (args.containsOption("trId")) {
33051 amit.gupta 331
                int transactionId = Integer.parseInt(args.getOptionValues("trId").get(0));
33054 amit.gupta 332
                scheduledTasks.removePartialBillingForTransaction(transactionId);
33051 amit.gupta 333
            }
334
            System.exit(0);
335
        }
34523 ranu 336
        if (args.containsOption("createOpeningStockPartyWise")) {
337
            scheduledTasks.createOpeningStockPartyWise();
338
            System.exit(0);
339
        }
31753 tejbeer 340
        if (args.containsOption("tc")) {
341
            System.out.println("Toffee service called");
342
            scheduledTasks.toffeeRollback();
343
            System.exit(0);
344
        }
345
        if (args.containsOption("bag")) {
346
            System.out.println("Bag service called");
347
            runOnceTasks.testBag();
348
            System.exit(0);
349
        }
29814 tejbeer 350
 
31753 tejbeer 351
        if (args.containsOption("rw")) {
352
            System.out.println("Reverse wallet");
353
            scheduledTasks.reverseWallet();
354
            System.exit(0);
355
        }
356
        if (args.containsOption("sendIndentTertiary")) {
357
            System.out.println("sendIndentTertiary");
358
            scheduledTasks.sendIndentTertiary();
359
            System.exit(0);
360
        }
361
        if (args.containsOption("checkPartnerActiveStore")) {
362
            System.out.println("checkPartnerActiveStore");
363
            scheduledTasks.checkPartnerActiveStore();
364
            System.exit(0);
365
        }
37172 amit 366
        if (args.containsOption("updatePjpAgendaInstances")) {
367
            System.out.println("updatePjpAgendaInstances");
368
            scheduledTasks.updatePjpAgendaInstances();
369
            System.exit(0);
370
        }
37040 ranu 371
        if (args.containsOption("updatePartnerActivationTypeByMonthlySale")) {
372
            System.out.println("updatePartnerActivationTypeByMonthlySale");
373
            scheduledTasks.updatePartnerActivationTypeByMonthlySale();
374
            System.exit(0);
375
        }
29800 manish 376
 
31753 tejbeer 377
        if (args.containsOption("selectFinServiceFollowUpDateByCurrDate")) {
378
            System.out.println("selectfinServiceFollowUpDateByCurrDate");
28368 tejbeer 379
 
31753 tejbeer 380
            scheduledTasks.selectFinServiceFollowUpDateByCurrDate(LocalDate.now());
381
            System.exit(0);
382
        }
25073 amit.gupta 383
 
31753 tejbeer 384
        if (args.containsOption("addHdfcPayment")) {
385
            runOnceTasks.addPayment();
386
            System.exit(0);
387
        }
35250 amit 388
        if (args.containsOption("migrateOriginalInventoryItemId")) {
389
            int batchSize = 10_000;
390
            if (args.containsOption("batchSize")) {
391
                try {
392
                    batchSize = Integer.parseInt(args.getOptionValues("batchSize").get(0));
393
                } catch (Exception e) {
394
                    LOGGER.warn("Invalid batchSize provided, defaulting to {}", batchSize);
395
                }
396
            }
397
            LOGGER.info("Starting migration for warehouse.inventoryItem.originalInventoryItemId with batchSize={}", batchSize);
37602 amit 398
            migrations.migrateWarehouseOriginalInventoryItemId(batchSize);
35250 amit 399
            LOGGER.info("Migration completed.");
400
            System.exit(0);
401
        }
37613 amit 402
        if (args.containsOption("autoGrnInternal")) {
403
            if (!args.containsOption("invoices") || !args.containsOption("email")) {
404
                LOGGER.error("autoGrnInternal needs --invoices=A,B and --email=<operator>");
405
                System.exit(1);
406
            }
407
            List<String> invoiceNumbers = new ArrayList<>();
408
            for (String value : args.getOptionValues("invoices")) {
409
                for (String invoiceNumber : value.split(",")) {
410
                    if (!invoiceNumber.trim().isEmpty()) {
411
                        invoiceNumbers.add(invoiceNumber.trim());
412
                    }
413
                }
414
            }
415
            String operatorEmail = args.getOptionValues("email").get(0);
416
            boolean dryRun = args.containsOption("dryRun");
417
            internalGrnTask.grnInternalInvoices(invoiceNumbers, operatorEmail, dryRun);
418
            System.exit(0);
419
        }
37617 amit 420
        if (args.containsOption("reverseGrnInternal")) {
421
            if (!args.containsOption("invoices")) {
422
                LOGGER.error("reverseGrnInternal needs --invoices=A,B");
423
                System.exit(1);
424
            }
425
            List<String> invoiceNumbers = new ArrayList<>();
426
            for (String value : args.getOptionValues("invoices")) {
427
                for (String invoiceNumber : value.split(",")) {
428
                    if (!invoiceNumber.trim().isEmpty()) {
429
                        invoiceNumbers.add(invoiceNumber.trim());
430
                    }
431
                }
432
            }
433
            internalGrnTask.reverseInternalInvoices(invoiceNumbers, args.containsOption("dryRun"));
434
            System.exit(0);
435
        }
31753 tejbeer 436
        if (args.containsOption("processSchemeOut")) {
437
            System.out.println("Process schemeOut");
438
            int orderId = Integer.parseInt(args.getOptionValues("orderid").get(0));
439
            int fofoId = Integer.parseInt(args.getOptionValues("fofoid").get(0));
440
            runOnceTasks.processSchemeOut(fofoId, orderId);
441
            System.exit(0);
442
        }
443
        if (args.containsOption("at")) {
444
            System.out.println("Toffee service called");
445
            ticketRelatedScheduledTask.alertforTicket();
446
            System.exit(0);
447
        }
448
        if (args.containsOption("et")) {
449
            ticketRelatedScheduledTask.escalateTicket();
450
            ;
451
            System.exit(0);
452
        }
37499 ranu 453
        if (args.containsOption("iciciBalance")) {
454
            System.out.println("Fetching ICICI CD balance manually");
455
            try {
456
                LastTransactionsResponseModel response = iciciLombardService.getLastTwentyFiveTransactions(null);
457
                System.out.println("Response: " + response);
458
                if (response != null
459
                        && response.getTransactionsDetails() != null
460
                        && !response.getTransactionsDetails().isEmpty()) {
461
                    LastTransactionsResponseModel.TransactionDetail latest = response.getTransactionsDetails().get(0);
462
                    System.out.println("Current available balance = " + latest.getAvailableBalance()
463
                            + " (as of " + latest.getEffectiveDate() + " — status: " + latest.getStatus() + ")");
464
                    System.out.println("Last 25 transactions:");
465
                    response.getTransactionsDetails().forEach(t -> System.out.println("  " + t));
466
                }
467
            } catch (Exception e) {
468
                e.printStackTrace();
469
            }
470
            System.exit(0);
471
        }
31753 tejbeer 472
        if (args.containsOption("sr")) {
473
            List<String> schemeIds = args.getOptionValues("schemeId");
474
            System.out.println(schemeIds);
475
            scheduledTasks.schemeRollback(schemeIds);
476
            System.exit(0);
477
        }
478
        if (args.containsOption("processActivation")) {
479
            scheduledTasks.processActivation();
480
            System.exit(0);
481
        }
25721 tejbeer 482
 
31753 tejbeer 483
        if (args.containsOption("checkRazorPayPaymentStatus")) {
484
            scheduledTasks.checkRazorPayPaymentStatus();
485
            System.exit(0);
486
        }
487
        if (args.containsOption("grouping")) {
488
            scheduledTasks.grouping();
489
            System.exit(0);
490
        }
491
        if (args.containsOption("fixWallet")) {
492
            runOnceTasks.fixWallet();
493
            System.exit(0);
494
        }
36511 amit 495
        if (args.containsOption("reconcileInventorySnapshot")) {
496
            warehouseStockReconciliation.reconcile();
497
            System.exit(0);
498
        }
37159 amit 499
        if (args.containsOption("partnerIdentityIntegrityMonitor")) {
500
            partnerIdentityIntegrityMonitor.monitor();
501
            System.exit(0);
502
        }
31753 tejbeer 503
        if (args.containsOption("reconcileExpiredFixedSchemes")) {
504
            reconciliation.reconcileExpiredFixedSchemes();
505
            System.exit(0);
506
        }
507
        if (args.containsOption("dailyReconciliation")) {
508
            if (args.containsOption("date")) {
509
                LocalDate date = LocalDate.parse(args.getOptionValues("date").get(0));
510
                reconciliation.dailyReconciliation(date);
511
            } else {
512
                reconciliation.dailyReconciliation(LocalDate.now().minusDays(1));
513
            }
514
            System.exit(0);
515
        }
516
        /*
517
         * if (args.containsOption("test")) { schemeService.processSchemeIn(9243,
518
         * 175138102); throw new Exception(); }
519
         */
28921 tejbeer 520
 
31753 tejbeer 521
        if (args.containsOption("sendNotification")) {
522
            scheduledTasks.sendNotification();
523
            System.exit(0);
524
        }
26291 tejbeer 525
 
36063 ranu 526
        if (args.containsOption("processPendingMails")) {
527
            System.out.println("Processing pending mails...");
528
            mailOutboxService.processPendingMails();
529
            System.exit(0);
530
        }
531
 
37499 ranu 532
        // Dispatch any notification_schedule rows whose scheduled_timestamp <= now.
533
        // Same code path as the hourly cron in NotificationDispatchScheduler, but callable
534
        // on demand from dev / staging where the isProd gate normally blocks the cron.
535
        // Usage: --dispatchScheduledNotifications [--batch=200]
37510 ranu 536
        if (args.containsOption("dispatchScheduledNotifications")) {
37499 ranu 537
            int batch = 200;
538
            if (args.containsOption("batch")) {
539
                try { batch = Integer.parseInt(args.getOptionValues("batch").get(0)); }
540
                catch (Exception ignored) { }
541
            }
542
            System.out.println("Dispatching due scheduled notifications (batch=" + batch + ")...");
543
            int attempted = notificationService.dispatchDueScheduled(batch);
544
            System.out.println("Attempted: " + attempted + " row(s)");
545
            System.exit(0);
37510 ranu 546
        }
37499 ranu 547
 
31753 tejbeer 548
        if (args.containsOption("ticketClosed")) {
35568 amit 549
            // Redirected to TicketRelatedScheduledTask which handles auto-close as part of escalateTicket
550
            ticketRelatedScheduledTask.escalateTicket();
31753 tejbeer 551
            System.exit(0);
552
        }
28207 tejbeer 553
 
31753 tejbeer 554
        if (args.containsOption("getVendorWarehouses")) {
555
            int warehouseId = Integer.parseInt(args.getOptionValues("warehouseId").get(0));
556
            scheduledTasks.getVendorWarehouses(warehouseId);
557
            System.exit(0);
558
        }
29776 tejbeer 559
 
31753 tejbeer 560
        if (args.containsOption("checkfocusedModelInPartnerStock")) {
34344 amit.gupta 561
            try {
562
                scheduledTasks.checkfocusedModelInPartnerStock();
563
            } finally {
564
                System.exit(0);
565
            }
31753 tejbeer 566
        }
29451 manish 567
 
31753 tejbeer 568
        if (args.containsOption("checkImeiActivation")) {
569
            scheduledTasks.checkImeiActivation();
570
            System.exit(0);
571
        }
29776 tejbeer 572
 
31753 tejbeer 573
        if (args.containsOption("partnerProblemAlert")) {
574
            scheduledTasks.partnerProblemAlert();
575
            System.exit(0);
576
        }
577
        if (args.containsOption("notify")) {
578
            if (args.containsOption("fofoId")) {
579
                int fofoId = Integer.parseInt(args.getOptionValues("fofoId").get(0));
580
                scheduledTasks.sendDailySalesNotificationToPartner(fofoId);
581
            }
582
            System.exit(0);
583
        }
584
        if (args.containsOption("findMismatchesInIndent")) {
585
            runOnceTasks.findMismatchesInIndent();
586
            System.exit(0);
587
        }
29035 tejbeer 588
 
31753 tejbeer 589
        if (args.containsOption("onboardingEventDelays")) {
590
            onBoardingRelatedSchelduleTask.onboardingEventDelays();
591
            System.exit(0);
592
        }
28982 tejbeer 593
 
31753 tejbeer 594
        if (args.containsOption("onBoardingCompleteEventEmail")) {
595
            onBoardingRelatedSchelduleTask.onBoardingCompleteEventEmail();
596
            System.exit(0);
597
        }
28921 tejbeer 598
 
31753 tejbeer 599
        if (args.containsOption("onBoardingDocumentsPending")) {
600
            onBoardingRelatedSchelduleTask.onBoardingDocumentsPending();
601
            System.exit(0);
602
        }
603
        if (args.containsOption("onBoardingMigration")) {
604
            onBoardingRelatedSchelduleTask.onBoardingMigration();
605
            System.exit(0);
606
        }
28921 tejbeer 607
 
33859 tejus.loha 608
//        if (args.containsOption("advancePaymentPendingAlert")) {
609
//            onBoardingRelatedSchelduleTask.advancePaymentPendingAlert();
610
//            System.exit(0);
611
//        }
28963 tejbeer 612
 
31753 tejbeer 613
        if (args.containsOption("fullPaymentPendingAlert")) {
614
            onBoardingRelatedSchelduleTask.fullPaymentPendingAlert();
615
            System.exit(0);
616
        }
29308 tejbeer 617
 
33859 tejus.loha 618
//        if (args.containsOption("advancePaymentPendinglegalAlert")) {
619
//            onBoardingRelatedSchelduleTask.advancePaymentPendinglegalAlert();
620
//            System.exit(0);
621
//        }
31117 tejbeer 622
 
31753 tejbeer 623
        if (args.containsOption("markDelhiveryOrderDelivered")) {
32831 amit.gupta 624
            orderTrackingService.markDelhiveryOrderDelivered();
31753 tejbeer 625
            System.exit(0);
626
        }
32831 amit.gupta 627
 
31753 tejbeer 628
        if (args.containsOption("markBlueDartOrderDelivered")) {
32794 raveendra. 629
            System.out.println("Marking BlueDart Order Delivered...");
32831 amit.gupta 630
            orderTrackingService.markBlueDartOrderDelivered();
31753 tejbeer 631
            System.exit(0);
632
        }
633
        if (args.containsOption("mergingdata")) {
634
            onBoardingRelatedSchelduleTask.mergingdata();
635
            System.exit(0);
636
        }
637
        if (args.containsOption("brandingAlert")) {
638
            onBoardingRelatedSchelduleTask.brandingAlert();
639
            System.exit(0);
640
        }
31089 amit.gupta 641
 
33859 tejus.loha 642
//        if (args.containsOption("storeTimelinePromoterPending")) {
643
//            onBoardingRelatedSchelduleTask.storeTimelinePromoterPending();
644
//            System.exit(0);
645
//        }
31249 tejbeer 646
 
31753 tejbeer 647
        if (args.containsOption("ppl")) {
648
            runOnceTasks.printPendingLeads();
649
            System.exit(0);
650
        }
31249 tejbeer 651
 
31753 tejbeer 652
        if (args.containsOption("notifyAll")) {
653
            scheduledTasks.sendDailySalesNotificationToPartner(null);
654
            System.exit(0);
655
        }
31249 tejbeer 656
 
31753 tejbeer 657
        if (args.containsOption("monthlyTargetForInternalTeam")) {
658
            scheduledTasks.monthlyTargetForInternalTeam();
659
            System.exit(0);
660
        }
31249 tejbeer 661
 
31753 tejbeer 662
        if (args.containsOption("monthlyTargetForPartner")) {
663
            scheduledTasks.monthlyTargetForPartner();
664
            System.exit(0);
665
        }
33444 ranu 666
        if (args.containsOption("findAllLiveDemoBrandItemsByBillingDate")) {
667
            scheduledTasks.findAllLiveDemoBrandItemsByBillingDate();
668
            System.exit(0);
669
        }
33464 ranu 670
        if (args.containsOption("findTodayPocoBillingItems")) {
671
            scheduledTasks.findTodayPocoBillingItems();
672
            System.exit(0);
673
        }
28921 tejbeer 674
 
31753 tejbeer 675
        if (args.containsOption("hygineAlertForPartner")) {
676
            scheduledTasks.hygineAlertForPartner();
677
            System.exit(0);
678
        }
28921 tejbeer 679
 
31753 tejbeer 680
        if (args.containsOption("hygineAlertForInternalTeam")) {
681
            scheduledTasks.hygineAlertForInternalTeam();
682
            System.exit(0);
683
        }
684
 
32214 jai.hind 685
        if (args.containsOption("checkItelImeiActivationNew")) {
686
            scheduledTasks.checkItelImeiActivationNew(LocalDate.now(), 15);
687
            System.exit(0);
688
        }
37479 amit 689
        // One tick's worth (50 imeis), not a full pass -- the backlog is cleared by the
690
        // scheduled 5-minute ticks. Useful for checking the endpoint by hand.
691
        if (args.containsOption("checkCarlcareImeiActivation")) {
692
            scheduledTasks.checkCarlcareImeiActivation();
693
            System.exit(0);
694
        }
31753 tejbeer 695
        if (args.containsOption("once")) {
33274 amit.gupta 696
 
697
            if (args.containsOption("autoClosePurchaseOrders")) {
698
                poScheduler.autoClosePurchaseOrders();
699
            }
31753 tejbeer 700
            if (args.containsOption("cancelOnceAssist")) {
701
                if (args.containsOption("invoiceNumber")) {
702
                    String oneAssistInvoiceNumber = args.getOptionValues("invoiceNumber").get(0);
703
                    runOnceTasks.cancelOnceAssist(oneAssistInvoiceNumber);
704
                }
705
 
35266 ranu 706
 
31753 tejbeer 707
            }
34208 ranu 708
            if (args.containsOption("cancelOnceAssist")) {
709
                if (args.containsOption("MemberShipNumber")) {
710
                    String applicationNo = args.getOptionValues("applicationNo").get(0);
711
                    String membershipId = args.getOptionValues("membershipId").get(0);
712
                    runOnceTasks.cancelOnceAssistByMemberShipNumber(applicationNo, membershipId);
713
                }
714
 
715
            }
33260 amit.gupta 716
            if (args.containsOption("changeFulfillmentWarehouse")) {
717
                if (args.containsOption("orderId") && args.containsOption("whId")) {
35277 amit 718
                    List<Integer> orderIds = Arrays.stream(args.getOptionValues("orderId").get(0).split(","))
719
                            .map(String::trim)
720
                            .map(Integer::parseInt)
721
                            .collect(Collectors.toList());
722
 
35276 amit 723
                    int warehouseId = Integer.parseInt(args.getOptionValues("whId").get(0));
724
                    for (Integer orderId : orderIds) {
725
                        runOnceTasks.changeFulfillmentWarehouse(orderId, warehouseId);
726
                    }
33260 amit.gupta 727
                }
728
                System.exit(0);
729
            }
31753 tejbeer 730
            if (args.containsOption("1")) {
731
                if (args.containsOption("test")) {
31618 amit.gupta 732
                    //scheduledTasks.sendPartnerInvestmentDetails(args.getOptionValues("email"));
31753 tejbeer 733
                    System.out.println("Calling test method");
36003 aman 734
                    try {
735
                        scheduledTasks.test();
736
                    } catch (Throwable e) {
737
                        throw new RuntimeException(e);
738
                    }
35165 amit 739
                    System.exit(0);
32083 tejbeer 740
 
741
                    if (args.containsOption("migrateVendorItemPricing")) {
742
                        scheduledTasks.migrateVendorItemPricing();
743
                        System.exit(0);
744
                    }
745
 
746
                    if (args.containsOption("approveVendorCatalogPricing")) {
747
                        scheduledTasks.approveVendorCatalogPricing();
748
                        System.exit(0);
749
                    }
32080 tejbeer 750
                } else if (args.containsOption("test1")) {
32008 amit.gupta 751
                    scheduledTasks.test1();
34845 ranu 752
                } else if (args.containsOption("scheduleTaskTest1")) {
753
 
754
                    scheduledTasksTest.test();
755
                }else if (args.containsOption("generateBiReport")) {
756
                    scheduledTasksTest.generateBiReport();
34945 ranu 757
                }else if (args.containsOption("abmSendertest")) {
34946 ranu 758
                    runOnceTasks.setAbmReportSender();
35788 vikas 759
                }else if (args.containsOption("syncProductsToShopify")) {
36058 ranu 760
                    shopifyProductSyncService.syncByWarehouse(ProfitMandiConstants.WAREHOUSE_NAME_MAP.get("UP-WEST/NOIDA"));
34321 ranu 761
                }
34860 ranu 762
                else if (args.containsOption("fetchPartnerDisburseMentTask")) {
763
                    if(args.containsOption("fetchDisbursements")){
764
                        fetchPartnersDisbursementTask.fetchDisbursementsTest();
765
                    }
766
                    else if(args.containsOption("creditAmountTest")){
767
                        fetchPartnersDisbursementTask.creditAmountTest();
768
                    }
769
                    else if(args.containsOption("createContactsAndFundsForFranchiseeTest")){
770
                        fetchPartnersDisbursementTask.createContactsAndFundsForFranchiseeTest();
771
                    }
772
                    else if(args.containsOption("rabbitTransactionProducertest")){
773
                        fetchPartnersDisbursementTask.rabbitTransactionProducertest();
774
                    }
34879 ranu 775
                    else if(args.containsOption("sendingDisbursementMail")){
776
                        fetchPartnersDisbursementTask.sendingDisbursementMail();
777
                    }
34860 ranu 778
                    else {
779
                        fetchPartnersDisbursementTask.test();
780
                    }
781
                }
34845 ranu 782
                else if (args.containsOption("testNew1")) {
34307 ranu 783
                    List<String> loanIdArgs = args.getOptionValues("loanIds");  // ["34833,36536,37151"]
784
                    List<Integer> loanIds = new ArrayList<>();
785
 
786
                    if (loanIdArgs != null && !loanIdArgs.isEmpty()) {
787
                        String csv = loanIdArgs.get(0);
788
                        loanIds = Arrays.stream(csv.split(","))
789
                                .map(String::trim)
790
                                .map(Integer::parseInt)
791
                                .collect(Collectors.toList());
792
                    }
34321 ranu 793
                    scheduledTasksTest.findLoanTransactionMapingAccordingLoan(loanIds);
34309 ranu 794
                } else if (args.containsOption("testNew2")) {
34308 ranu 795
                    if (args.containsOption("createLoan")) {
796
                        // Extract each parameter
797
                        int transactionId = 0;
798
                        double invoiceAmount = 0.0;
799
                        String invoiceNumber = "";
800
 
801
                        if (args.containsOption("transactionId")) {
802
                            transactionId = Integer.parseInt(args.getOptionValues("transactionId").get(0));
803
                        }
804
 
805
                        if (args.containsOption("invoiceAmount")) {
806
                            invoiceAmount = Double.parseDouble(args.getOptionValues("invoiceAmount").get(0));
807
                        }
808
 
809
                        if (args.containsOption("invoiceNumber")) {
810
                            invoiceNumber = args.getOptionValues("invoiceNumber").get(0);
811
                        }
812
 
813
                        // Call your method
814
                        scheduledTasksTest.createLoanForBillingByTransactionIdAndInvoiceNumber(transactionId, invoiceAmount, invoiceNumber);
815
                    }
816
 
32482 amit.gupta 817
                } else {
31753 tejbeer 818
                    System.out.println("Called sendPartnerInvestmentDetails");
819
                    scheduledTasks.sendPartnerInvestmentDetails();
820
                }
821
                System.exit(0);
822
            }
823
            if (args.containsOption("2")) {
824
                if (args.containsOption("test")) {
825
                    String[] emails = new String[args.getOptionValues("email").size()];
826
                    scheduledTasks.sendAgeingReport(args.getOptionValues("email").toArray(emails));
827
                } else {
828
                    scheduledTasks.sendAgeingReport();
829
                }
830
                System.exit(0);
831
            }
33457 amit.gupta 832
 
31753 tejbeer 833
            if (args.containsOption("cancelOrder")) {
834
                List<String> invoiceNumbers = args.getOptionValues("invoiceNumber");
835
                runOnceTasks.cancelOrder(invoiceNumbers);
836
            }
36554 amit 837
            if (args.containsOption("postCreditNoteForDuplicateInvoice")) {
838
                String duplicateInvoice = args.getOptionValues("duplicateInvoice").get(0);
839
                String activeInvoice = args.getOptionValues("activeInvoice").get(0);
840
                runOnceTasks.postCreditNoteForDuplicateInvoice(duplicateInvoice, activeInvoice);
841
            }
31753 tejbeer 842
            if (args.containsOption("migratePurchase")) {
843
                runOnceTasks.migratePurchase();
844
            }
845
            if (args.containsOption("migratepd")) {
846
                scheduledTasks.moveImeisToPriceDropImeis();
847
            }
848
            if (args.containsOption("walletmismatch")) {
849
                scheduledTasks.walletmismatch();
850
            }
851
            if (args.containsOption("schemewalletmismatch")) {
852
                scheduledTasks.schemewalletmismatch();
853
            }
854
            if (args.containsOption("gst")) {
855
                scheduledTasks.gst();
856
            }
857
            if (args.containsOption("mailDashboardScreenshots")) {
858
                runOnceTasks.mailDashboardScreenshots();
859
            }
860
            if (args.containsOption("notifyLead")) {
861
                scheduledTasks.notifyLead();
862
                scheduledTasks.notifyVisits();
863
            }
864
            if (args.containsOption("fixgrn")) {
865
                runOnceTasks.fixGrn();
866
            }
867
            if (args.containsOption("pbfix")) {
868
                runOnceTasks.pbfix();
869
            }
870
            if (args.containsOption("mongom")) {
871
                runOnceTasks.mongom();
872
            }
873
            if (args.containsOption("processPd")) {
874
                int priceDropId = Integer.parseInt(args.getOptionValues("processPd").get(0));
875
                runOnceTasks.processPd(priceDropId);
876
            }
877
            if (args.containsOption("samsung")) {
878
                if (args.containsOption("ym")) {
879
                    int ym = Integer.parseInt(args.getOptionValues("ym").get(0));
880
                    runOnceTasks.fetchImeiActivation(ym);
881
                }
882
                runOnceTasks.fetchImeiActivation(0);
883
            }
884
            if (args.containsOption("fixdupimeigrn")) {
885
                runOnceTasks.fixDupGrns();
886
            }
887
            if (args.containsOption("cancel")) {
36053 amit 888
                boolean recreatePri = args.containsOption("recreatePri");
889
                runOnceTasks.cancelDn(args.getOptionValues("dn").get(0), recreatePri);
31753 tejbeer 890
            }
891
            if (args.containsOption("fixScheme")) {
892
                runOnceTasks.fixScheme();
893
            }
894
            if (args.containsOption("syncLeads")) {
895
                leadSyncRunner.syncLeads();
896
            }
897
            if (args.containsOption("testCs")) {
898
                int category = Integer.parseInt(args.getOptionValues("category").get(0));
899
                EscalationType escalationType = EscalationType.valueOf(args.getOptionValues("escalation").get(0));
900
                int fofoId = Integer.parseInt(args.getOptionValues("fofoid").get(0));
901
                csService.getAuthUserId(category, escalationType, fofoId);
902
            }
903
            if (args.containsOption("duporder")) {
904
                runOnceTasks.removeDuplicateOrders();
905
            }
906
            if (args.containsOption("createDummyInvoices")) {
907
                runOnceTasks.createDummyInvoices();
908
            }
28921 tejbeer 909
 
31753 tejbeer 910
            if (args.containsOption("createGeofence")) {
911
                runOnceTasks.createGeofence();
912
            }
913
            if (args.containsOption("getAllGeofences")) {
914
                runOnceTasks.getAllGeofences();
915
            }
916
            if (args.containsOption("payMonthlyInvestment")) {
917
                investmentRelatedTasks.payMonthlyInvestment();
918
            }
919
            if (args.containsOption("evaluateActualInvestmentPayout")) {
920
                investmentRelatedTasks.evaluateActualInvestmentPayout();
921
            }
922
            if (args.containsOption("deleteGeofences")) {
923
                List<String> geofenceIds = args.getOptionValues("geofenceId");
924
                runOnceTasks.deleteGeofences(geofenceIds);
925
            }
926
            if (args.containsOption("createOffers")) {
927
                if (args.containsOption("fileName")) {
928
                    String fileName = args.getOptionValues("fileName").get(0);
929
                    FileInputStream stream = new FileInputStream(fileName);
930
                    runOnceTasks.createOffers(stream);
931
                }
932
            }
933
            if (args.containsOption("schemeout")) {
934
                if (args.containsOption("invoices")) {
935
                    String invoicesString = args.getOptionValues("invoices").get(0);
936
                    List<String> invoices = Arrays.asList(invoicesString.split(","));
937
                    scheduledTasks.processSchemeOut(invoices);
938
                }
939
            }
940
            if (args.containsOption("schemein")) {
941
                if (args.containsOption("invoices")) {
942
                    String invoicesString = args.getOptionValues("invoices").get(0);
943
                    List<String> invoices = Arrays.asList(invoicesString.split(","));
944
                    scheduledTasks.processSchemeIn(invoices);
945
                }
946
            }
28921 tejbeer 947
 
31753 tejbeer 948
            if (args.containsOption("fixScans")) {
949
                runOnceTasks.fixScans();
950
            }
951
            if (args.containsOption("fixPrebookingOrderGrn")) {
952
                runOnceTasks.genericCreateCurrentInventorySnapshot();
953
            }
954
            if (args.containsOption("fixOurSerialized")) {
955
                if (args.containsOption("orderIds")) {
956
                    String orderIdsString = args.getOptionValues("orderIds").get(0);
957
                    List<Integer> orderIds = Arrays.asList(orderIdsString.split(",")).stream().map(x -> Integer.parseInt(x)).collect(Collectors.toList());
958
                    // runOnceTasks.fixOurSerialized(orderIds);
959
                }
960
            }
29776 tejbeer 961
 
31753 tejbeer 962
            if (args.containsOption("reverseMaa")) {
963
                runOnceTasks.reverseMaa();
964
            }
29776 tejbeer 965
 
31753 tejbeer 966
            if (args.containsOption("fixOffer")) {
967
                runOnceTasks.fixOffer();
968
            }
29794 tejbeer 969
 
31753 tejbeer 970
            if (args.containsOption("opporeno")) {
971
                runOnceTasks.opporeno();
972
            }
30309 amit.gupta 973
 
31753 tejbeer 974
            if (args.containsOption("fixorders")) {
975
                runOnceTasks.fixOrders();
976
            }
977
            if (args.containsOption("fixreservations")) {
978
                runOnceTasks.fixReservations();
979
            }
980
            if (args.containsOption("addinvestment")) {
981
                runOnceTasks.addInvestment();
982
            }
983
            if (args.containsOption("brandregion")) {
984
                runOnceTasks.brandRegion();
985
            }
986
            if (args.containsOption("rollOutUpgardedMargins")) {
35520 amit 987
                scheduledTasks.rollOutUpgardedMargins(Arrays.asList(175140172, 175140189));
31753 tejbeer 988
            }
34029 ranu 989
            if (args.containsOption("pushRbmTargets")) {
990
                scheduledTasks.persistRbmTodayTargets();
991
            }
37499 ranu 992
            if (args.containsOption("pushSalesTargets")) {
993
                // Run this AFTER pushRbmTargets so today's RBM snapshots exist to roll up.
994
                scheduledTasks.persistSalesTodayTargets();
995
            }
996
            if (args.containsOption("pushSalesTargetsForDate")) {
997
                // Backfill / seed for a specific date, e.g. --pushSalesTargetsForDate=2026-08-25
998
                LocalDate d = LocalDate.parse(args.getOptionValues("pushSalesTargetsForDate").get(0));
999
                scheduledTasks.persistSalesTargetsForDate(d);
1000
            }
1001
            if (args.containsOption("pushSalesAchievements")) {
1002
                // Daily Sales achievement snapshot (audit/history). Independent
1003
                // of pushSalesTargets — can run any time after orders settle.
1004
                scheduledTasks.persistSalesTodayAchievements();
1005
            }
1006
            if (args.containsOption("pushSalesAchievementsForDate")) {
1007
                // Backfill / seed for a specific date, e.g. --pushSalesAchievementsForDate=2026-08-25
1008
                LocalDate d = LocalDate.parse(args.getOptionValues("pushSalesAchievementsForDate").get(0));
1009
                scheduledTasks.persistSalesAchievementsForDate(d);
1010
            }
31753 tejbeer 1011
            if (args.containsOption("rollOutUpgardedMarginsNextMonth")) {
35524 amit 1012
                System.out.println("In rollOutUpgardedMarginsNextMonth");
35532 amit 1013
                scheduledTasks.rollOutUpgardedMarginsNextMonth(Arrays.asList(175140172, 175140189, 175138897));
31753 tejbeer 1014
            }
1015
            if (args.containsOption("checkCancellationMargin")) {
1016
                scheduledTasks.checkCancellationMargin();
1017
            }
1018
            if (args.containsOption("reviewUncontactablePartner")) {
1019
                scheduledTasks.reviewUncontactablePartner();
1020
            }
33078 ranu 1021
            if (args.containsOption("reviewNonSdBuyingBrand")) {
1022
                scheduledTasks.reviewNonSdBuyingBrand();
1023
            }
31753 tejbeer 1024
            if (args.containsOption("sendWelcomeEmail")) {
1025
                onBoardingRelatedSchelduleTask.sendWelcomeEmail();
1026
            }
29814 tejbeer 1027
 
31753 tejbeer 1028
            if (args.containsOption("partnerOnboardingLegalMigration")) {
1029
                onBoardingRelatedSchelduleTask.partnerOnboardingLegalMigration();
1030
            }
31031 amit.gupta 1031
 
33526 amit.gupta 1032
            if(args.containsOption("moveOrders")) {
1033
                runOnceTasks.moveOrders();
1034
            }
1035
 
31753 tejbeer 1036
            if (args.containsOption("addKycLegalMigration")) {
1037
                onBoardingRelatedSchelduleTask.addKycLegalMigration();
1038
            }
29776 tejbeer 1039
 
1040
 
31753 tejbeer 1041
            if (args.containsOption("pushDataToSolr")) {
1042
                listing.pushDataToSolr();
1043
            }
30120 amit.gupta 1044
 
37567 amit 1045
            // Manual run of the daily 05:30 delist. Honours the same
1046
            // catalog.autoDelist.enabled flag as the scheduled path.
1047
            if (args.containsOption("delistDeadListings")) {
1048
                listing.scheduledDelistDeadListings();
1049
            }
1050
 
31753 tejbeer 1051
            if (args.containsOption("testGstPro")) {
1052
                System.out.println("TestGstProc called");
1053
                try {
1054
                    runOnceTasks.updateIrnsToInvoices();
1055
                } catch (Exception e) {
1056
                    e.printStackTrace();
1057
                }
1058
            }
29308 tejbeer 1059
 
37058 amit 1060
            if (args.containsOption("regenerateBilledInvoices")) {
1061
                if (args.containsOption("fromTime") && args.containsOption("toTime")) {
1062
                    LocalDateTime fromTime = LocalDateTime.parse(args.getOptionValues("fromTime").get(0));
1063
                    LocalDateTime toTime = LocalDateTime.parse(args.getOptionValues("toTime").get(0));
1064
                    runOnceTasks.regenerateBilledInvoices(fromTime, toTime);
1065
                } else {
1066
                    System.out.println("regenerateBilledInvoices requires --fromTime and --toTime (ISO, e.g. 2026-06-01T00:00:00)");
1067
                }
1068
                System.exit(0);
1069
            }
1070
 
31753 tejbeer 1071
            if (args.containsOption("reverseSchemeCancelInvoice")) {
1072
                if (args.containsOption("invoice")) {
1073
                    String invoice = args.getOptionValues("invoice").get(0);
1074
                    runOnceTasks.reverseSchemes(invoice);
1075
                }
1076
            }
29863 tejbeer 1077
 
31753 tejbeer 1078
            if (args.containsOption("reverseInvalidActivation")) {
1079
                if (args.containsOption("inventoryids")) {
1080
                    String inventoryItemIdsString = args.getOptionValues("inventoryids").get(0);
1081
                    List<Integer> inventoryItemIds = new ArrayList<>();
1082
                    for (String inventoryItemIdString : inventoryItemIdsString.split(",")) {
1083
                        int inventoryItemId = Integer.parseInt(inventoryItemIdString.trim());
1084
                        inventoryItemIds.add(inventoryItemId);
1085
                    }
1086
                    runOnceTasks.reverseInvalidActivation(inventoryItemIds);
1087
                }
1088
            }
29863 tejbeer 1089
 
31753 tejbeer 1090
            if (args.containsOption("runme")) {
1091
                runOnceTasks.runMe();
1092
            }
1093
            if (args.containsOption("" + "")) {
1094
                upgradeOfferService.authenticateUser();
1095
            }
1096
            if (args.containsOption("mandiiUser")) {
1097
                runOnceTasks.mandiiUser(args.getOptionValues("firstName").get(0), args.getOptionValues("lastName").get(0), args.getOptionValues("pan").get(0), args.getOptionValues("dob").get(0), args.getOptionValues("aadhaar").get(0), args.getOptionValues("gender").get(0), args.getOptionValues("father").get(0));
1098
            }
30335 amit.gupta 1099
 
31753 tejbeer 1100
            if (args.containsOption("mandiiUsers")) {
1101
                if (args.containsOption("pan")) {
1102
                    runOnceTasks.mandiiUsers(args.getOptionValues("pan").get(0));
1103
                } else {
1104
                    runOnceTasks.mandiiUsers();
1105
                }
1106
            }
30576 amit.gupta 1107
 
37472 amit 1108
            // Oppo and realme are one pass now, so one option drives both. Note this
1109
            // runs the FULL daily pass -- everything due today, not a 25-imei sample.
1110
            if (args.containsOption("checkBrowserImeiActivation")) {
1111
                standAlone.checkBrowserImeiActivation();
31753 tejbeer 1112
            }
30616 amit.gupta 1113
 
31753 tejbeer 1114
            /*
1115
             * if (args.containsOption("checkRealmeImeiStatus")) { try {
1116
             * standAlone.checkRealmeImeiStatus(); } catch (Exception e) {
1117
             * e.printStackTrace(); } }
1118
             */
30616 amit.gupta 1119
 
31753 tejbeer 1120
            if (args.containsOption("amazonPurchase")) {
1121
                try {
1122
                    runOnceTasks.amazonPurchase();
1123
                } catch (Exception e) {
1124
                    e.printStackTrace();
1125
                }
1126
            }
30641 amit.gupta 1127
 
31753 tejbeer 1128
            if (args.containsOption("getCaptchaCode")) {
1129
                try {
1130
                    captchaService.getCaptchaCode("/home/amit/Desktop/generatingCodes.jpg");
1131
                } catch (Exception e) {
1132
                    e.printStackTrace();
1133
                }
1134
            }
30641 amit.gupta 1135
 
37326 amit 1136
            // --backfillMissingEwb --invoiceNumbers=A,B,C [--dryRun]
1137
            // Recovers EWB details from NIC for invoices whose IRN was recovered via DUPIRN, then
1138
            // re-renders their PDFs so the e-way bill section appears.
1139
            if (args.containsOption("backfillMissingEwb")) {
1140
                try {
1141
                    List<String> invoiceNumbers = Arrays.stream(
1142
                                    args.getOptionValues("invoiceNumbers").get(0).split(","))
1143
                            .map(String::trim).filter(x -> !x.isEmpty()).collect(Collectors.toList());
1144
                    boolean dryRun = args.containsOption("dryRun");
1145
                    System.out.println("backfillMissingEwb: " + invoiceNumbers.size()
1146
                            + " invoice(s), dryRun=" + dryRun);
1147
                    runOnceTasks.backfillMissingEwb(invoiceNumbers, dryRun);
1148
                } catch (Exception e) {
1149
                    e.printStackTrace();
1150
                }
1151
            }
1152
 
31753 tejbeer 1153
            if (args.containsOption("testIrnLive")) {
1154
                try {
1155
                    runOnceTasks.testIrnLive(args.getOptionValues("invoiceNumber").get(0));
1156
                } catch (Exception e) {
1157
                    e.printStackTrace();
1158
                }
1159
            }
30659 amit.gupta 1160
 
31753 tejbeer 1161
            if (args.containsOption("createoffercriteria")) {
1162
                try {
1163
                    runOnceTasks.createOfferCriteria();
1164
                } catch (Exception e) {
1165
                    e.printStackTrace();
1166
                }
1167
            }
30659 amit.gupta 1168
 
31753 tejbeer 1169
            if (args.containsOption("fix-price-drops")) {
1170
                runOnceTasks.fixPriceDrop();
1171
            }
29035 tejbeer 1172
 
31753 tejbeer 1173
            if (args.containsOption("processSchemeByIds")) {
1174
                List<String> schemeIds = Arrays.asList(args.getOptionValues("ids").get(0).split(","));
1175
                List<Integer> schemeIdsInt = schemeIds.stream().map(x -> Integer.parseInt(x)).collect(Collectors.toList());
1176
                runOnceTasks.processSchemeByIds(schemeIdsInt);
1177
            }
30859 tejbeer 1178
 
31753 tejbeer 1179
            if (args.containsOption("updateSaholicCISTable")) {
1180
                runOnceTasks.updateSaholicCISTable();
1181
            }
30859 tejbeer 1182
 
31753 tejbeer 1183
            if (args.containsOption("mapbag")) {
1184
                runOnceTasks.mapBag();
1185
            }
30859 tejbeer 1186
 
34579 vikas.jang 1187
            if (args.containsOption("todayBidPO")) {
34443 vikas.jang 1188
                runOnceTasks.processBids(ProfitMandiConstants.BID_CRON_ENUM.TODAY);
1189
            }
1190
 
34579 vikas.jang 1191
            if (args.containsOption("yesterdayBidPO")) {
1192
                runOnceTasks.processBids(ProfitMandiConstants.BID_CRON_ENUM.YESTERDAY);
1193
            }
1194
 
34547 vikas.jang 1195
            if (args.containsOption("biddingConsolidatedMessage")) {
1196
                runOnceTasks.consolidatedBiddingMessage();
1197
            }
1198
 
1199
            if (args.containsOption("sendMailWhatsAppAfterLoanDueDate")) {
1200
                scheduledTasks.sendMailWhatsAppAfterLoanDueDate();
1201
            }
1202
 
34836 vikas 1203
            if (args.containsOption("yesterdayTrackingReport")) {
1204
                runOnceTasks.yesterdayTrackingReport();
34770 vikas.jang 1205
            }
1206
 
31753 tejbeer 1207
            System.exit(0);
1208
        }
30859 tejbeer 1209
 
31753 tejbeer 1210
        if (args.containsOption("calculateInterestAccured")) {
30929 tejbeer 1211
 
31753 tejbeer 1212
            scheduledTasks.calculateInterestAccured();
1213
            System.exit(0);
1214
        }
30929 tejbeer 1215
 
31753 tejbeer 1216
        if (args.containsOption("loanSettlement")) {
30890 amit.gupta 1217
 
31753 tejbeer 1218
            scheduledTasks.loanSettlement();
1219
            System.exit(0);
1220
        }
30896 amit.gupta 1221
 
31753 tejbeer 1222
        if (args.containsOption("dailyLoanAlert")) {
30936 tejbeer 1223
 
31753 tejbeer 1224
            scheduledTasks.dailyLoanAlert();
1225
            System.exit(0);
1226
        }
30982 tejbeer 1227
 
36564 amit 1228
        if (args.containsOption("testFlagshipBilling")) {
1229
            int trId = Integer.parseInt(args.getOptionValues("testFlagshipBilling").get(0));
1230
            double amt = Double.parseDouble(args.getOptionValues("testFlagshipBillingAmount").get(0));
1231
            String inv = args.getOptionValues("testFlagshipBillingInvoice").get(0);
1232
            scheduledTasks.testFlagshipBilling(trId, amt, inv);
1233
            System.exit(0);
1234
        }
1235
 
36554 amit 1236
        if (args.containsOption("convertExpiredFlagshipCredits")) {
1237
            scheduledTasks.convertExpiredFlagshipCredits();
1238
            System.exit(0);
1239
        }
1240
 
36745 ranu 1241
        // Manual back-fill for missed-beat detection. Default: today.
1242
        // Usage: --detectMissedBeats [--date=YYYY-MM-DD]
1243
        if (args.containsOption("detectMissedBeats")) {
1244
            LocalDate date = LocalDate.now();
1245
            if (args.containsOption("date")) {
1246
                date = LocalDate.parse(args.getOptionValues("date").get(0));
1247
            }
1248
            int inserted = beatMissDetectorRunner.syncMissesForDate(date);
1249
            LOGGER.info("detectMissedBeats: {} miss rows inserted for {}", inserted, date);
1250
            System.exit(0);
1251
        }
1252
 
36554 amit 1253
        if (args.containsOption("notifyFlagshipExpiryIn2Days")) {
1254
            scheduledTasks.notifyFlagshipExpiryIn2Days();
1255
            System.exit(0);
1256
        }
1257
 
31753 tejbeer 1258
        if (args.containsOption("notifyDefaultLoans")) {
1259
            scheduledTasks.notifyDefaultLoans();
1260
            System.exit(0);
1261
        }
31446 amit.gupta 1262
 
31753 tejbeer 1263
        if (args.containsOption("fixinsurance")) {
1264
            runOnceTasks.addMissingWalletDebitsForInsurance();
1265
            System.exit(0);
1266
        }
31604 tejbeer 1267
 
31753 tejbeer 1268
        if (args.containsOption("processActivatedImeisForSchemes")) {
1269
            scheduledTasks.processActivatedImeisForSchemes();
1270
            System.exit(0);
1271
        }
31604 tejbeer 1272
 
36306 amit 1273
        if (args.containsOption("updatePartnerLimitWithBatch")) {
1274
            System.out.println("Running updatePartnerLimit with batch tracking");
1275
            batchScheduledTasks.updatePartnerLimitWithBatch();
1276
            System.exit(0);
1277
        }
1278
 
1279
        if (args.containsOption("processOffersWithBatch")) {
1280
            for (String val : args.getOptionValues("processOffersWithBatch")) {
1281
                for (String id : val.split(",")) {
1282
                    int offerId = Integer.parseInt(id.trim());
1283
                    System.out.println("Processing offer with batch: " + offerId);
1284
                    batchScheduledTasks.processOfferWithBatch(offerId);
1285
                }
1286
            }
1287
            System.exit(0);
1288
        }
1289
 
31753 tejbeer 1290
        if (args.containsOption("notifyLoanDueDateCross")) {
1291
            scheduledTasks.notifyLoanDueDateCross();
1292
            System.exit(0);
1293
        }
34275 tejus.loha 1294
        if (args.containsOption("sendTenOrMoreOrderStockReport")) {
1295
            scheduledTasks.send10OrMoreOlderStockReport();
1296
            System.exit(0);
1297
        }
31604 tejbeer 1298
 
31753 tejbeer 1299
        if (args.containsOption("alertForDueDate")) {
1300
            scheduledTasks.alertForDueDate();
1301
            System.exit(0);
1302
        }
31648 tejbeer 1303
 
31753 tejbeer 1304
        if (args.containsOption("fetchParnterStats")) {
1305
            scheduledTasks.fetchParnterStats();
1306
            System.exit(0);
1307
        }
1308
 
1309
        if (args.containsOption("morning")) {
1310
            if (args.containsOption("0")) {
1311
                scheduledTasks.sendPartnerInvestmentDetails();
1312
            }
1313
            if (args.containsOption("1")) {
1314
                scheduledTasks.sendIndentTertiary();
1315
            }
1316
            // 0
1317
            if (args.containsOption("2")) {
1318
                scheduledTasks.calculateInterestAccured();
1319
            }
1320
            System.out.println("scheduledTasks.calculateInterestAccured()");
1321
            // 0
1322
            if (args.containsOption("3")) {
32831 amit.gupta 1323
                orderTrackingService.markDelhiveryOrderDelivered();
31753 tejbeer 1324
            }
1325
            System.out.println("scheduledTasks.markDelhiveryOrderDelivered()");
1326
            // 1
1327
            if (args.containsOption("4")) {
1328
                scheduledTasks.processActivatedImeisForSchemes();
1329
            }
1330
            System.out.println("scheduledTasks.processActivatedImeisForSchemes()");
1331
            // 2
1332
            if (args.containsOption("5")) {
1333
                scheduledTasks.processActivation();
1334
            }
1335
            System.out.println("scheduledTasks.processActivation()");
1336
            // 4
1337
            if (args.containsOption("6")) {
1338
                scheduledTasks.processPriceDrop();
1339
            }
1340
            System.out.println("scheduledTasks.processPriceDrop()");
1341
            // 5
1342
            if (args.containsOption("7")) {
1343
                scheduledTasks.loanSettlement();
1344
            }
1345
            System.out.println("scheduledTasks.loanSettlement()");
36554 amit 1346
            if (args.containsOption("7a")) {
1347
                scheduledTasks.convertExpiredFlagshipCredits();
1348
                scheduledTasks.notifyFlagshipExpiryIn2Days();
1349
            }
1350
            System.out.println("scheduledTasks.convertExpiredFlagshipCredits()");
31753 tejbeer 1351
            // 8
1352
            if (args.containsOption("8")) {
1353
                scheduledTasks.reviewUncontactablePartner();
1354
            }
1355
            // 9
33859 tejus.loha 1356
//            if (args.containsOption("9")) {
1357
//                onBoardingRelatedSchelduleTask.storeTimelinePromoterPending();
1358
//            }
1359
//            // 9
1360
//            if (args.containsOption("10")) {
1361
//                onBoardingRelatedSchelduleTask.advancePaymentPendinglegalAlert();
1362
//            }
31753 tejbeer 1363
            // sendPartnerInvestment
1364
            if (args.containsOption("11")) {
1365
                scheduledTasks.sendPartnerInvestmentDetails();
1366
            }
37236 amit 1367
            if (args.containsOption("1")) {
36993 amit 1368
                // Defaults to a dry-run (harmless dev path); pass --live to run the real pipeline.
1369
                boolean dryRun = !args.containsOption("live");
1370
                System.out.println("Calling sendCreditNote (dryRun=" + dryRun + ")");
34029 ranu 1371
                YearMonth yearMonth = YearMonth.now().minusMonths(1);
36993 amit 1372
                scheduledTasks.sendCreditNote(yearMonth, dryRun);
31753 tejbeer 1373
            }
37258 amit 1374
            if (args.containsOption("syncHotDealFlags")) {
1375
                try {
1376
                    System.out.println("Calling syncHotDealFlags");
1377
                    scheduledTasks.syncHotDealFlags();
1378
                    System.out.println("syncHotDealFlags completed successfully");
1379
                } catch (Exception e) {
1380
                    System.err.println("syncHotDealFlags FAILED: " + e.getMessage());
1381
                    e.printStackTrace(System.err);
1382
                }
1383
            }
37238 amit 1384
            if (args.containsOption("regenMarginIrns")) {
1385
                // One-time: generate missing IRNs for issued margin CN/DNs (mixed-sign docs
1386
                // now netted per GST rate in the payload). Dry-run by default; --live to run.
1387
                boolean dryRun = !args.containsOption("live");
1388
                try {
1389
                    String ymStr = args.getOptionValues("regenMarginIrns").isEmpty() ? null : args.getOptionValues("regenMarginIrns").get(0);
1390
                    YearMonth yearMonth = ymStr != null && !ymStr.isEmpty() ? YearMonth.parse(ymStr) : YearMonth.now().minusMonths(1);
1391
                    System.out.println("regenMarginIrns for " + yearMonth + " (dryRun=" + dryRun + ")");
1392
                    scheduledTasks.regenMarginIrns(yearMonth, dryRun);
1393
                    System.out.println("regenMarginIrns completed successfully");
1394
                } catch (Exception e) {
1395
                    System.err.println("regenMarginIrns FAILED: " + e.getMessage());
1396
                    e.printStackTrace(System.err);
1397
                }
1398
            }
37236 amit 1399
            if (args.containsOption("cancelMarginDnIrns")) {
1400
                // One-time: cancel IRNs of margin DNs inflated by the abs bug (24h NIC window!)
1401
                // and mark them cancelled so a sendCreditNote rerun reissues corrected DNs.
1402
                // Defaults to dry-run; pass --live to actually cancel.
1403
                boolean dryRun = !args.containsOption("live");
1404
                try {
1405
                    String ymStr = args.getOptionValues("cancelMarginDnIrns").isEmpty() ? null : args.getOptionValues("cancelMarginDnIrns").get(0);
1406
                    YearMonth yearMonth = ymStr != null && !ymStr.isEmpty() ? YearMonth.parse(ymStr) : YearMonth.now().minusMonths(1);
1407
                    System.out.println("cancelMarginDnIrns for " + yearMonth + " (dryRun=" + dryRun + ")");
1408
                    scheduledTasks.cancelMarginDnIrns(yearMonth, dryRun);
1409
                    System.out.println("cancelMarginDnIrns completed successfully");
1410
                } catch (Exception e) {
1411
                    System.err.println("cancelMarginDnIrns FAILED: " + e.getMessage());
1412
                    e.printStackTrace(System.err);
1413
                }
1414
            }
37232 amit 1415
            if (args.containsOption("corrMarginCNs")) {
1416
                // One-time corrective CNs against wrongly-inflated margin DNs.
1417
                // Defaults to dry-run; pass --live to issue real documents.
1418
                boolean dryRun = !args.containsOption("live");
1419
                try {
1420
                    String ymStr = args.getOptionValues("corrMarginCNs").isEmpty() ? null : args.getOptionValues("corrMarginCNs").get(0);
1421
                    YearMonth yearMonth = ymStr != null && !ymStr.isEmpty() ? YearMonth.parse(ymStr) : YearMonth.now().minusMonths(1);
1422
                    System.out.println("corrMarginCNs for " + yearMonth + " (dryRun=" + dryRun + ")");
1423
                    scheduledTasks.corrMarginCNs(yearMonth, dryRun);
1424
                    System.out.println("corrMarginCNs completed successfully");
1425
                } catch (Exception e) {
1426
                    System.err.println("corrMarginCNs FAILED: " + e.getMessage());
1427
                    e.printStackTrace(System.err);
1428
                }
1429
            }
36220 amit 1430
            if (args.containsOption("genDNs")) {
1431
                System.out.println("Calling genDNs");
36254 amit 1432
                try {
1433
                    String ymStr = args.getOptionValues("genDNs").isEmpty() ? null : args.getOptionValues("genDNs").get(0);
1434
                    YearMonth yearMonth = ymStr != null ? YearMonth.parse(ymStr) : YearMonth.now().minusMonths(1);
1435
                    System.out.println("genDNs for " + yearMonth);
1436
                    scheduledTasks.genDNs(yearMonth);
1437
                    System.out.println("genDNs completed successfully");
1438
                } catch (Exception e) {
1439
                    System.err.println("genDNs FAILED: " + e.getMessage());
1440
                    e.printStackTrace(System.err);
1441
                }
36220 amit 1442
            }
36503 amit 1443
            if (args.containsOption("genDNsForCNs")) {
1444
                System.out.println("Calling genDNsForCNs");
1445
                try {
1446
                    String cnList = args.getOptionValues("genDNsForCNs").get(0);
1447
                    List<String> cnNumbers = Arrays.asList(cnList.split(","));
1448
                    System.out.println("genDNsForCNs for " + cnNumbers.size() + " CNs: " + cnNumbers);
1449
                    scheduledTasks.genDNsForCNs(cnNumbers);
1450
                    System.out.println("genDNsForCNs completed successfully");
1451
                } catch (Exception e) {
1452
                    System.err.println("genDNsForCNs FAILED: " + e.getMessage());
1453
                    e.printStackTrace(System.err);
1454
                }
1455
            }
36433 amit 1456
            System.exit(0);
1457
        }
1458
 
31753 tejbeer 1459
    }
24848 amit.gupta 1460
}