Subversion Repositories SmartDukaan

Rev

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