Subversion Repositories SmartDukaan

Rev

Rev 37602 | Rev 37617 | 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
        }
31753 tejbeer 415
        if (args.containsOption("processSchemeOut")) {
416
            System.out.println("Process schemeOut");
417
            int orderId = Integer.parseInt(args.getOptionValues("orderid").get(0));
418
            int fofoId = Integer.parseInt(args.getOptionValues("fofoid").get(0));
419
            runOnceTasks.processSchemeOut(fofoId, orderId);
420
            System.exit(0);
421
        }
422
        if (args.containsOption("at")) {
423
            System.out.println("Toffee service called");
424
            ticketRelatedScheduledTask.alertforTicket();
425
            System.exit(0);
426
        }
427
        if (args.containsOption("et")) {
428
            ticketRelatedScheduledTask.escalateTicket();
429
            ;
430
            System.exit(0);
431
        }
37499 ranu 432
        if (args.containsOption("iciciBalance")) {
433
            System.out.println("Fetching ICICI CD balance manually");
434
            try {
435
                LastTransactionsResponseModel response = iciciLombardService.getLastTwentyFiveTransactions(null);
436
                System.out.println("Response: " + response);
437
                if (response != null
438
                        && response.getTransactionsDetails() != null
439
                        && !response.getTransactionsDetails().isEmpty()) {
440
                    LastTransactionsResponseModel.TransactionDetail latest = response.getTransactionsDetails().get(0);
441
                    System.out.println("Current available balance = " + latest.getAvailableBalance()
442
                            + " (as of " + latest.getEffectiveDate() + " — status: " + latest.getStatus() + ")");
443
                    System.out.println("Last 25 transactions:");
444
                    response.getTransactionsDetails().forEach(t -> System.out.println("  " + t));
445
                }
446
            } catch (Exception e) {
447
                e.printStackTrace();
448
            }
449
            System.exit(0);
450
        }
31753 tejbeer 451
        if (args.containsOption("sr")) {
452
            List<String> schemeIds = args.getOptionValues("schemeId");
453
            System.out.println(schemeIds);
454
            scheduledTasks.schemeRollback(schemeIds);
455
            System.exit(0);
456
        }
457
        if (args.containsOption("processActivation")) {
458
            scheduledTasks.processActivation();
459
            System.exit(0);
460
        }
461
        if (args.containsOption("sendAttendanceMorningAlert")) {
462
            scheduledTasks.sendAttendanceMorningAlert();
463
            System.exit(0);
464
        }
465
        if (args.containsOption("sendAttendanceEveningAlert")) {
466
            scheduledTasks.sendAttendanceEveningAlert();
467
            System.exit(0);
468
        }
25721 tejbeer 469
 
31753 tejbeer 470
        if (args.containsOption("checkRazorPayPaymentStatus")) {
471
            scheduledTasks.checkRazorPayPaymentStatus();
472
            System.exit(0);
473
        }
474
        if (args.containsOption("grouping")) {
475
            scheduledTasks.grouping();
476
            System.exit(0);
477
        }
478
        if (args.containsOption("fixWallet")) {
479
            runOnceTasks.fixWallet();
480
            System.exit(0);
481
        }
36511 amit 482
        if (args.containsOption("reconcileInventorySnapshot")) {
483
            warehouseStockReconciliation.reconcile();
484
            System.exit(0);
485
        }
37159 amit 486
        if (args.containsOption("partnerIdentityIntegrityMonitor")) {
487
            partnerIdentityIntegrityMonitor.monitor();
488
            System.exit(0);
489
        }
31753 tejbeer 490
        if (args.containsOption("reconcileExpiredFixedSchemes")) {
491
            reconciliation.reconcileExpiredFixedSchemes();
492
            System.exit(0);
493
        }
494
        if (args.containsOption("dailyReconciliation")) {
495
            if (args.containsOption("date")) {
496
                LocalDate date = LocalDate.parse(args.getOptionValues("date").get(0));
497
                reconciliation.dailyReconciliation(date);
498
            } else {
499
                reconciliation.dailyReconciliation(LocalDate.now().minusDays(1));
500
            }
501
            System.exit(0);
502
        }
503
        /*
504
         * if (args.containsOption("test")) { schemeService.processSchemeIn(9243,
505
         * 175138102); throw new Exception(); }
506
         */
28921 tejbeer 507
 
31753 tejbeer 508
        if (args.containsOption("sendNotification")) {
509
            scheduledTasks.sendNotification();
510
            System.exit(0);
511
        }
26291 tejbeer 512
 
36063 ranu 513
        if (args.containsOption("processPendingMails")) {
514
            System.out.println("Processing pending mails...");
515
            mailOutboxService.processPendingMails();
516
            System.exit(0);
517
        }
518
 
37499 ranu 519
        // Dispatch any notification_schedule rows whose scheduled_timestamp <= now.
520
        // Same code path as the hourly cron in NotificationDispatchScheduler, but callable
521
        // on demand from dev / staging where the isProd gate normally blocks the cron.
522
        // Usage: --dispatchScheduledNotifications [--batch=200]
37510 ranu 523
        if (args.containsOption("dispatchScheduledNotifications")) {
37499 ranu 524
            int batch = 200;
525
            if (args.containsOption("batch")) {
526
                try { batch = Integer.parseInt(args.getOptionValues("batch").get(0)); }
527
                catch (Exception ignored) { }
528
            }
529
            System.out.println("Dispatching due scheduled notifications (batch=" + batch + ")...");
530
            int attempted = notificationService.dispatchDueScheduled(batch);
531
            System.out.println("Attempted: " + attempted + " row(s)");
532
            System.exit(0);
37510 ranu 533
        }
37499 ranu 534
 
31753 tejbeer 535
        if (args.containsOption("ticketClosed")) {
35568 amit 536
            // Redirected to TicketRelatedScheduledTask which handles auto-close as part of escalateTicket
537
            ticketRelatedScheduledTask.escalateTicket();
31753 tejbeer 538
            System.exit(0);
539
        }
28207 tejbeer 540
 
31753 tejbeer 541
        if (args.containsOption("getVendorWarehouses")) {
542
            int warehouseId = Integer.parseInt(args.getOptionValues("warehouseId").get(0));
543
            scheduledTasks.getVendorWarehouses(warehouseId);
544
            System.exit(0);
545
        }
29776 tejbeer 546
 
31753 tejbeer 547
        if (args.containsOption("checkfocusedModelInPartnerStock")) {
34344 amit.gupta 548
            try {
549
                scheduledTasks.checkfocusedModelInPartnerStock();
550
            } finally {
551
                System.exit(0);
552
            }
31753 tejbeer 553
        }
29451 manish 554
 
31753 tejbeer 555
        if (args.containsOption("checkImeiActivation")) {
556
            scheduledTasks.checkImeiActivation();
557
            System.exit(0);
558
        }
29776 tejbeer 559
 
31753 tejbeer 560
        if (args.containsOption("partnerProblemAlert")) {
561
            scheduledTasks.partnerProblemAlert();
562
            System.exit(0);
563
        }
564
        if (args.containsOption("notify")) {
565
            if (args.containsOption("fofoId")) {
566
                int fofoId = Integer.parseInt(args.getOptionValues("fofoId").get(0));
567
                scheduledTasks.sendDailySalesNotificationToPartner(fofoId);
568
            }
569
            System.exit(0);
570
        }
571
        if (args.containsOption("findMismatchesInIndent")) {
572
            runOnceTasks.findMismatchesInIndent();
573
            System.exit(0);
574
        }
29035 tejbeer 575
 
31753 tejbeer 576
        if (args.containsOption("onboardingEventDelays")) {
577
            onBoardingRelatedSchelduleTask.onboardingEventDelays();
578
            System.exit(0);
579
        }
28982 tejbeer 580
 
31753 tejbeer 581
        if (args.containsOption("onBoardingCompleteEventEmail")) {
582
            onBoardingRelatedSchelduleTask.onBoardingCompleteEventEmail();
583
            System.exit(0);
584
        }
28921 tejbeer 585
 
31753 tejbeer 586
        if (args.containsOption("onBoardingDocumentsPending")) {
587
            onBoardingRelatedSchelduleTask.onBoardingDocumentsPending();
588
            System.exit(0);
589
        }
590
        if (args.containsOption("onBoardingMigration")) {
591
            onBoardingRelatedSchelduleTask.onBoardingMigration();
592
            System.exit(0);
593
        }
28921 tejbeer 594
 
33859 tejus.loha 595
//        if (args.containsOption("advancePaymentPendingAlert")) {
596
//            onBoardingRelatedSchelduleTask.advancePaymentPendingAlert();
597
//            System.exit(0);
598
//        }
28963 tejbeer 599
 
31753 tejbeer 600
        if (args.containsOption("fullPaymentPendingAlert")) {
601
            onBoardingRelatedSchelduleTask.fullPaymentPendingAlert();
602
            System.exit(0);
603
        }
29308 tejbeer 604
 
33859 tejus.loha 605
//        if (args.containsOption("advancePaymentPendinglegalAlert")) {
606
//            onBoardingRelatedSchelduleTask.advancePaymentPendinglegalAlert();
607
//            System.exit(0);
608
//        }
31117 tejbeer 609
 
31753 tejbeer 610
        if (args.containsOption("markDelhiveryOrderDelivered")) {
32831 amit.gupta 611
            orderTrackingService.markDelhiveryOrderDelivered();
31753 tejbeer 612
            System.exit(0);
613
        }
32831 amit.gupta 614
 
31753 tejbeer 615
        if (args.containsOption("markBlueDartOrderDelivered")) {
32794 raveendra. 616
            System.out.println("Marking BlueDart Order Delivered...");
32831 amit.gupta 617
            orderTrackingService.markBlueDartOrderDelivered();
31753 tejbeer 618
            System.exit(0);
619
        }
620
        if (args.containsOption("mergingdata")) {
621
            onBoardingRelatedSchelduleTask.mergingdata();
622
            System.exit(0);
623
        }
624
        if (args.containsOption("brandingAlert")) {
625
            onBoardingRelatedSchelduleTask.brandingAlert();
626
            System.exit(0);
627
        }
31089 amit.gupta 628
 
33859 tejus.loha 629
//        if (args.containsOption("storeTimelinePromoterPending")) {
630
//            onBoardingRelatedSchelduleTask.storeTimelinePromoterPending();
631
//            System.exit(0);
632
//        }
31249 tejbeer 633
 
31753 tejbeer 634
        if (args.containsOption("ppl")) {
635
            runOnceTasks.printPendingLeads();
636
            System.exit(0);
637
        }
31249 tejbeer 638
 
31753 tejbeer 639
        if (args.containsOption("notifyAll")) {
640
            scheduledTasks.sendDailySalesNotificationToPartner(null);
641
            System.exit(0);
642
        }
31249 tejbeer 643
 
31753 tejbeer 644
        if (args.containsOption("monthlyTargetForInternalTeam")) {
645
            scheduledTasks.monthlyTargetForInternalTeam();
646
            System.exit(0);
647
        }
31249 tejbeer 648
 
31753 tejbeer 649
        if (args.containsOption("monthlyTargetForPartner")) {
650
            scheduledTasks.monthlyTargetForPartner();
651
            System.exit(0);
652
        }
33444 ranu 653
        if (args.containsOption("findAllLiveDemoBrandItemsByBillingDate")) {
654
            scheduledTasks.findAllLiveDemoBrandItemsByBillingDate();
655
            System.exit(0);
656
        }
33464 ranu 657
        if (args.containsOption("findTodayPocoBillingItems")) {
658
            scheduledTasks.findTodayPocoBillingItems();
659
            System.exit(0);
660
        }
28921 tejbeer 661
 
31753 tejbeer 662
        if (args.containsOption("hygineAlertForPartner")) {
663
            scheduledTasks.hygineAlertForPartner();
664
            System.exit(0);
665
        }
28921 tejbeer 666
 
31753 tejbeer 667
        if (args.containsOption("hygineAlertForInternalTeam")) {
668
            scheduledTasks.hygineAlertForInternalTeam();
669
            System.exit(0);
670
        }
671
 
32214 jai.hind 672
        if (args.containsOption("checkItelImeiActivationNew")) {
673
            scheduledTasks.checkItelImeiActivationNew(LocalDate.now(), 15);
674
            System.exit(0);
675
        }
37479 amit 676
        // One tick's worth (50 imeis), not a full pass -- the backlog is cleared by the
677
        // scheduled 5-minute ticks. Useful for checking the endpoint by hand.
678
        if (args.containsOption("checkCarlcareImeiActivation")) {
679
            scheduledTasks.checkCarlcareImeiActivation();
680
            System.exit(0);
681
        }
31753 tejbeer 682
        if (args.containsOption("once")) {
33274 amit.gupta 683
 
684
            if (args.containsOption("autoClosePurchaseOrders")) {
685
                poScheduler.autoClosePurchaseOrders();
686
            }
31753 tejbeer 687
            if (args.containsOption("cancelOnceAssist")) {
688
                if (args.containsOption("invoiceNumber")) {
689
                    String oneAssistInvoiceNumber = args.getOptionValues("invoiceNumber").get(0);
690
                    runOnceTasks.cancelOnceAssist(oneAssistInvoiceNumber);
691
                }
692
 
35266 ranu 693
 
31753 tejbeer 694
            }
34208 ranu 695
            if (args.containsOption("cancelOnceAssist")) {
696
                if (args.containsOption("MemberShipNumber")) {
697
                    String applicationNo = args.getOptionValues("applicationNo").get(0);
698
                    String membershipId = args.getOptionValues("membershipId").get(0);
699
                    runOnceTasks.cancelOnceAssistByMemberShipNumber(applicationNo, membershipId);
700
                }
701
 
702
            }
33260 amit.gupta 703
            if (args.containsOption("changeFulfillmentWarehouse")) {
704
                if (args.containsOption("orderId") && args.containsOption("whId")) {
35277 amit 705
                    List<Integer> orderIds = Arrays.stream(args.getOptionValues("orderId").get(0).split(","))
706
                            .map(String::trim)
707
                            .map(Integer::parseInt)
708
                            .collect(Collectors.toList());
709
 
35276 amit 710
                    int warehouseId = Integer.parseInt(args.getOptionValues("whId").get(0));
711
                    for (Integer orderId : orderIds) {
712
                        runOnceTasks.changeFulfillmentWarehouse(orderId, warehouseId);
713
                    }
33260 amit.gupta 714
                }
715
                System.exit(0);
716
            }
31753 tejbeer 717
            if (args.containsOption("1")) {
718
                if (args.containsOption("test")) {
31618 amit.gupta 719
                    //scheduledTasks.sendPartnerInvestmentDetails(args.getOptionValues("email"));
31753 tejbeer 720
                    System.out.println("Calling test method");
36003 aman 721
                    try {
722
                        scheduledTasks.test();
723
                    } catch (Throwable e) {
724
                        throw new RuntimeException(e);
725
                    }
35165 amit 726
                    System.exit(0);
32083 tejbeer 727
 
728
                    if (args.containsOption("migrateVendorItemPricing")) {
729
                        scheduledTasks.migrateVendorItemPricing();
730
                        System.exit(0);
731
                    }
732
 
733
                    if (args.containsOption("approveVendorCatalogPricing")) {
734
                        scheduledTasks.approveVendorCatalogPricing();
735
                        System.exit(0);
736
                    }
32080 tejbeer 737
                } else if (args.containsOption("test1")) {
32008 amit.gupta 738
                    scheduledTasks.test1();
34845 ranu 739
                } else if (args.containsOption("scheduleTaskTest1")) {
740
 
741
                    scheduledTasksTest.test();
742
                }else if (args.containsOption("generateBiReport")) {
743
                    scheduledTasksTest.generateBiReport();
34945 ranu 744
                }else if (args.containsOption("abmSendertest")) {
34946 ranu 745
                    runOnceTasks.setAbmReportSender();
35788 vikas 746
                }else if (args.containsOption("syncProductsToShopify")) {
36058 ranu 747
                    shopifyProductSyncService.syncByWarehouse(ProfitMandiConstants.WAREHOUSE_NAME_MAP.get("UP-WEST/NOIDA"));
34321 ranu 748
                }
34860 ranu 749
                else if (args.containsOption("fetchPartnerDisburseMentTask")) {
750
                    if(args.containsOption("fetchDisbursements")){
751
                        fetchPartnersDisbursementTask.fetchDisbursementsTest();
752
                    }
753
                    else if(args.containsOption("creditAmountTest")){
754
                        fetchPartnersDisbursementTask.creditAmountTest();
755
                    }
756
                    else if(args.containsOption("createContactsAndFundsForFranchiseeTest")){
757
                        fetchPartnersDisbursementTask.createContactsAndFundsForFranchiseeTest();
758
                    }
759
                    else if(args.containsOption("rabbitTransactionProducertest")){
760
                        fetchPartnersDisbursementTask.rabbitTransactionProducertest();
761
                    }
34879 ranu 762
                    else if(args.containsOption("sendingDisbursementMail")){
763
                        fetchPartnersDisbursementTask.sendingDisbursementMail();
764
                    }
34860 ranu 765
                    else {
766
                        fetchPartnersDisbursementTask.test();
767
                    }
768
                }
34845 ranu 769
                else if (args.containsOption("testNew1")) {
34307 ranu 770
                    List<String> loanIdArgs = args.getOptionValues("loanIds");  // ["34833,36536,37151"]
771
                    List<Integer> loanIds = new ArrayList<>();
772
 
773
                    if (loanIdArgs != null && !loanIdArgs.isEmpty()) {
774
                        String csv = loanIdArgs.get(0);
775
                        loanIds = Arrays.stream(csv.split(","))
776
                                .map(String::trim)
777
                                .map(Integer::parseInt)
778
                                .collect(Collectors.toList());
779
                    }
34321 ranu 780
                    scheduledTasksTest.findLoanTransactionMapingAccordingLoan(loanIds);
34309 ranu 781
                } else if (args.containsOption("testNew2")) {
34308 ranu 782
                    if (args.containsOption("createLoan")) {
783
                        // Extract each parameter
784
                        int transactionId = 0;
785
                        double invoiceAmount = 0.0;
786
                        String invoiceNumber = "";
787
 
788
                        if (args.containsOption("transactionId")) {
789
                            transactionId = Integer.parseInt(args.getOptionValues("transactionId").get(0));
790
                        }
791
 
792
                        if (args.containsOption("invoiceAmount")) {
793
                            invoiceAmount = Double.parseDouble(args.getOptionValues("invoiceAmount").get(0));
794
                        }
795
 
796
                        if (args.containsOption("invoiceNumber")) {
797
                            invoiceNumber = args.getOptionValues("invoiceNumber").get(0);
798
                        }
799
 
800
                        // Call your method
801
                        scheduledTasksTest.createLoanForBillingByTransactionIdAndInvoiceNumber(transactionId, invoiceAmount, invoiceNumber);
802
                    }
803
 
32482 amit.gupta 804
                } else {
31753 tejbeer 805
                    System.out.println("Called sendPartnerInvestmentDetails");
806
                    scheduledTasks.sendPartnerInvestmentDetails();
807
                }
808
                System.exit(0);
809
            }
810
            if (args.containsOption("2")) {
811
                if (args.containsOption("test")) {
812
                    String[] emails = new String[args.getOptionValues("email").size()];
813
                    scheduledTasks.sendAgeingReport(args.getOptionValues("email").toArray(emails));
814
                } else {
815
                    scheduledTasks.sendAgeingReport();
816
                }
817
                System.exit(0);
818
            }
33457 amit.gupta 819
 
31753 tejbeer 820
            if (args.containsOption("cancelOrder")) {
821
                List<String> invoiceNumbers = args.getOptionValues("invoiceNumber");
822
                runOnceTasks.cancelOrder(invoiceNumbers);
823
            }
36554 amit 824
            if (args.containsOption("postCreditNoteForDuplicateInvoice")) {
825
                String duplicateInvoice = args.getOptionValues("duplicateInvoice").get(0);
826
                String activeInvoice = args.getOptionValues("activeInvoice").get(0);
827
                runOnceTasks.postCreditNoteForDuplicateInvoice(duplicateInvoice, activeInvoice);
828
            }
31753 tejbeer 829
            if (args.containsOption("migratePurchase")) {
830
                runOnceTasks.migratePurchase();
831
            }
832
            if (args.containsOption("migratepd")) {
833
                scheduledTasks.moveImeisToPriceDropImeis();
834
            }
835
            if (args.containsOption("walletmismatch")) {
836
                scheduledTasks.walletmismatch();
837
            }
838
            if (args.containsOption("schemewalletmismatch")) {
839
                scheduledTasks.schemewalletmismatch();
840
            }
841
            if (args.containsOption("gst")) {
842
                scheduledTasks.gst();
843
            }
844
            if (args.containsOption("mailDashboardScreenshots")) {
845
                runOnceTasks.mailDashboardScreenshots();
846
            }
847
            if (args.containsOption("notifyLead")) {
848
                scheduledTasks.notifyLead();
849
                scheduledTasks.notifyVisits();
850
            }
851
            if (args.containsOption("fixgrn")) {
852
                runOnceTasks.fixGrn();
853
            }
854
            if (args.containsOption("pbfix")) {
855
                runOnceTasks.pbfix();
856
            }
857
            if (args.containsOption("mongom")) {
858
                runOnceTasks.mongom();
859
            }
860
            if (args.containsOption("processPd")) {
861
                int priceDropId = Integer.parseInt(args.getOptionValues("processPd").get(0));
862
                runOnceTasks.processPd(priceDropId);
863
            }
864
            if (args.containsOption("samsung")) {
865
                if (args.containsOption("ym")) {
866
                    int ym = Integer.parseInt(args.getOptionValues("ym").get(0));
867
                    runOnceTasks.fetchImeiActivation(ym);
868
                }
869
                runOnceTasks.fetchImeiActivation(0);
870
            }
871
            if (args.containsOption("fixdupimeigrn")) {
872
                runOnceTasks.fixDupGrns();
873
            }
874
            if (args.containsOption("cancel")) {
36053 amit 875
                boolean recreatePri = args.containsOption("recreatePri");
876
                runOnceTasks.cancelDn(args.getOptionValues("dn").get(0), recreatePri);
31753 tejbeer 877
            }
878
            if (args.containsOption("fixScheme")) {
879
                runOnceTasks.fixScheme();
880
            }
881
            if (args.containsOption("syncLeads")) {
882
                leadSyncRunner.syncLeads();
883
            }
884
            if (args.containsOption("testCs")) {
885
                int category = Integer.parseInt(args.getOptionValues("category").get(0));
886
                EscalationType escalationType = EscalationType.valueOf(args.getOptionValues("escalation").get(0));
887
                int fofoId = Integer.parseInt(args.getOptionValues("fofoid").get(0));
888
                csService.getAuthUserId(category, escalationType, fofoId);
889
            }
890
            if (args.containsOption("duporder")) {
891
                runOnceTasks.removeDuplicateOrders();
892
            }
893
            if (args.containsOption("createDummyInvoices")) {
894
                runOnceTasks.createDummyInvoices();
895
            }
28921 tejbeer 896
 
31753 tejbeer 897
            if (args.containsOption("createGeofence")) {
898
                runOnceTasks.createGeofence();
899
            }
900
            if (args.containsOption("getAllGeofences")) {
901
                runOnceTasks.getAllGeofences();
902
            }
903
            if (args.containsOption("payMonthlyInvestment")) {
904
                investmentRelatedTasks.payMonthlyInvestment();
905
            }
906
            if (args.containsOption("evaluateActualInvestmentPayout")) {
907
                investmentRelatedTasks.evaluateActualInvestmentPayout();
908
            }
909
            if (args.containsOption("deleteGeofences")) {
910
                List<String> geofenceIds = args.getOptionValues("geofenceId");
911
                runOnceTasks.deleteGeofences(geofenceIds);
912
            }
913
            if (args.containsOption("createOffers")) {
914
                if (args.containsOption("fileName")) {
915
                    String fileName = args.getOptionValues("fileName").get(0);
916
                    FileInputStream stream = new FileInputStream(fileName);
917
                    runOnceTasks.createOffers(stream);
918
                }
919
            }
920
            if (args.containsOption("schemeout")) {
921
                if (args.containsOption("invoices")) {
922
                    String invoicesString = args.getOptionValues("invoices").get(0);
923
                    List<String> invoices = Arrays.asList(invoicesString.split(","));
924
                    scheduledTasks.processSchemeOut(invoices);
925
                }
926
            }
927
            if (args.containsOption("schemein")) {
928
                if (args.containsOption("invoices")) {
929
                    String invoicesString = args.getOptionValues("invoices").get(0);
930
                    List<String> invoices = Arrays.asList(invoicesString.split(","));
931
                    scheduledTasks.processSchemeIn(invoices);
932
                }
933
            }
28921 tejbeer 934
 
31753 tejbeer 935
            if (args.containsOption("fixScans")) {
936
                runOnceTasks.fixScans();
937
            }
938
            if (args.containsOption("fixPrebookingOrderGrn")) {
939
                runOnceTasks.genericCreateCurrentInventorySnapshot();
940
            }
941
            if (args.containsOption("fixOurSerialized")) {
942
                if (args.containsOption("orderIds")) {
943
                    String orderIdsString = args.getOptionValues("orderIds").get(0);
944
                    List<Integer> orderIds = Arrays.asList(orderIdsString.split(",")).stream().map(x -> Integer.parseInt(x)).collect(Collectors.toList());
945
                    // runOnceTasks.fixOurSerialized(orderIds);
946
                }
947
            }
29776 tejbeer 948
 
31753 tejbeer 949
            if (args.containsOption("reverseMaa")) {
950
                runOnceTasks.reverseMaa();
951
            }
29776 tejbeer 952
 
31753 tejbeer 953
            if (args.containsOption("fixOffer")) {
954
                runOnceTasks.fixOffer();
955
            }
29794 tejbeer 956
 
31753 tejbeer 957
            if (args.containsOption("opporeno")) {
958
                runOnceTasks.opporeno();
959
            }
30309 amit.gupta 960
 
31753 tejbeer 961
            if (args.containsOption("fixorders")) {
962
                runOnceTasks.fixOrders();
963
            }
964
            if (args.containsOption("fixreservations")) {
965
                runOnceTasks.fixReservations();
966
            }
967
            if (args.containsOption("addinvestment")) {
968
                runOnceTasks.addInvestment();
969
            }
970
            if (args.containsOption("brandregion")) {
971
                runOnceTasks.brandRegion();
972
            }
973
            if (args.containsOption("rollOutUpgardedMargins")) {
35520 amit 974
                scheduledTasks.rollOutUpgardedMargins(Arrays.asList(175140172, 175140189));
31753 tejbeer 975
            }
34029 ranu 976
            if (args.containsOption("pushRbmTargets")) {
977
                scheduledTasks.persistRbmTodayTargets();
978
            }
37499 ranu 979
            if (args.containsOption("pushSalesTargets")) {
980
                // Run this AFTER pushRbmTargets so today's RBM snapshots exist to roll up.
981
                scheduledTasks.persistSalesTodayTargets();
982
            }
983
            if (args.containsOption("pushSalesTargetsForDate")) {
984
                // Backfill / seed for a specific date, e.g. --pushSalesTargetsForDate=2026-08-25
985
                LocalDate d = LocalDate.parse(args.getOptionValues("pushSalesTargetsForDate").get(0));
986
                scheduledTasks.persistSalesTargetsForDate(d);
987
            }
988
            if (args.containsOption("pushSalesAchievements")) {
989
                // Daily Sales achievement snapshot (audit/history). Independent
990
                // of pushSalesTargets — can run any time after orders settle.
991
                scheduledTasks.persistSalesTodayAchievements();
992
            }
993
            if (args.containsOption("pushSalesAchievementsForDate")) {
994
                // Backfill / seed for a specific date, e.g. --pushSalesAchievementsForDate=2026-08-25
995
                LocalDate d = LocalDate.parse(args.getOptionValues("pushSalesAchievementsForDate").get(0));
996
                scheduledTasks.persistSalesAchievementsForDate(d);
997
            }
31753 tejbeer 998
            if (args.containsOption("rollOutUpgardedMarginsNextMonth")) {
35524 amit 999
                System.out.println("In rollOutUpgardedMarginsNextMonth");
35532 amit 1000
                scheduledTasks.rollOutUpgardedMarginsNextMonth(Arrays.asList(175140172, 175140189, 175138897));
31753 tejbeer 1001
            }
1002
            if (args.containsOption("checkCancellationMargin")) {
1003
                scheduledTasks.checkCancellationMargin();
1004
            }
1005
            if (args.containsOption("reviewUncontactablePartner")) {
1006
                scheduledTasks.reviewUncontactablePartner();
1007
            }
33078 ranu 1008
            if (args.containsOption("reviewNonSdBuyingBrand")) {
1009
                scheduledTasks.reviewNonSdBuyingBrand();
1010
            }
31753 tejbeer 1011
            if (args.containsOption("sendWelcomeEmail")) {
1012
                onBoardingRelatedSchelduleTask.sendWelcomeEmail();
1013
            }
29814 tejbeer 1014
 
31753 tejbeer 1015
            if (args.containsOption("partnerOnboardingLegalMigration")) {
1016
                onBoardingRelatedSchelduleTask.partnerOnboardingLegalMigration();
1017
            }
31031 amit.gupta 1018
 
33526 amit.gupta 1019
            if(args.containsOption("moveOrders")) {
1020
                runOnceTasks.moveOrders();
1021
            }
1022
 
31753 tejbeer 1023
            if (args.containsOption("addKycLegalMigration")) {
1024
                onBoardingRelatedSchelduleTask.addKycLegalMigration();
1025
            }
29776 tejbeer 1026
 
1027
 
31753 tejbeer 1028
            if (args.containsOption("pushDataToSolr")) {
1029
                listing.pushDataToSolr();
1030
            }
30120 amit.gupta 1031
 
37567 amit 1032
            // Manual run of the daily 05:30 delist. Honours the same
1033
            // catalog.autoDelist.enabled flag as the scheduled path.
1034
            if (args.containsOption("delistDeadListings")) {
1035
                listing.scheduledDelistDeadListings();
1036
            }
1037
 
31753 tejbeer 1038
            if (args.containsOption("testGstPro")) {
1039
                System.out.println("TestGstProc called");
1040
                try {
1041
                    runOnceTasks.updateIrnsToInvoices();
1042
                } catch (Exception e) {
1043
                    e.printStackTrace();
1044
                }
1045
            }
29308 tejbeer 1046
 
37058 amit 1047
            if (args.containsOption("regenerateBilledInvoices")) {
1048
                if (args.containsOption("fromTime") && args.containsOption("toTime")) {
1049
                    LocalDateTime fromTime = LocalDateTime.parse(args.getOptionValues("fromTime").get(0));
1050
                    LocalDateTime toTime = LocalDateTime.parse(args.getOptionValues("toTime").get(0));
1051
                    runOnceTasks.regenerateBilledInvoices(fromTime, toTime);
1052
                } else {
1053
                    System.out.println("regenerateBilledInvoices requires --fromTime and --toTime (ISO, e.g. 2026-06-01T00:00:00)");
1054
                }
1055
                System.exit(0);
1056
            }
1057
 
31753 tejbeer 1058
            if (args.containsOption("reverseSchemeCancelInvoice")) {
1059
                if (args.containsOption("invoice")) {
1060
                    String invoice = args.getOptionValues("invoice").get(0);
1061
                    runOnceTasks.reverseSchemes(invoice);
1062
                }
1063
            }
29863 tejbeer 1064
 
31753 tejbeer 1065
            if (args.containsOption("reverseInvalidActivation")) {
1066
                if (args.containsOption("inventoryids")) {
1067
                    String inventoryItemIdsString = args.getOptionValues("inventoryids").get(0);
1068
                    List<Integer> inventoryItemIds = new ArrayList<>();
1069
                    for (String inventoryItemIdString : inventoryItemIdsString.split(",")) {
1070
                        int inventoryItemId = Integer.parseInt(inventoryItemIdString.trim());
1071
                        inventoryItemIds.add(inventoryItemId);
1072
                    }
1073
                    runOnceTasks.reverseInvalidActivation(inventoryItemIds);
1074
                }
1075
            }
29863 tejbeer 1076
 
31753 tejbeer 1077
            if (args.containsOption("runme")) {
1078
                runOnceTasks.runMe();
1079
            }
1080
            if (args.containsOption("" + "")) {
1081
                upgradeOfferService.authenticateUser();
1082
            }
1083
            if (args.containsOption("mandiiUser")) {
1084
                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));
1085
            }
30335 amit.gupta 1086
 
31753 tejbeer 1087
            if (args.containsOption("mandiiUsers")) {
1088
                if (args.containsOption("pan")) {
1089
                    runOnceTasks.mandiiUsers(args.getOptionValues("pan").get(0));
1090
                } else {
1091
                    runOnceTasks.mandiiUsers();
1092
                }
1093
            }
30576 amit.gupta 1094
 
37472 amit 1095
            // Oppo and realme are one pass now, so one option drives both. Note this
1096
            // runs the FULL daily pass -- everything due today, not a 25-imei sample.
1097
            if (args.containsOption("checkBrowserImeiActivation")) {
1098
                standAlone.checkBrowserImeiActivation();
31753 tejbeer 1099
            }
30616 amit.gupta 1100
 
31753 tejbeer 1101
            /*
1102
             * if (args.containsOption("checkRealmeImeiStatus")) { try {
1103
             * standAlone.checkRealmeImeiStatus(); } catch (Exception e) {
1104
             * e.printStackTrace(); } }
1105
             */
30616 amit.gupta 1106
 
31753 tejbeer 1107
            if (args.containsOption("amazonPurchase")) {
1108
                try {
1109
                    runOnceTasks.amazonPurchase();
1110
                } catch (Exception e) {
1111
                    e.printStackTrace();
1112
                }
1113
            }
30641 amit.gupta 1114
 
31753 tejbeer 1115
            if (args.containsOption("getCaptchaCode")) {
1116
                try {
1117
                    captchaService.getCaptchaCode("/home/amit/Desktop/generatingCodes.jpg");
1118
                } catch (Exception e) {
1119
                    e.printStackTrace();
1120
                }
1121
            }
30641 amit.gupta 1122
 
37326 amit 1123
            // --backfillMissingEwb --invoiceNumbers=A,B,C [--dryRun]
1124
            // Recovers EWB details from NIC for invoices whose IRN was recovered via DUPIRN, then
1125
            // re-renders their PDFs so the e-way bill section appears.
1126
            if (args.containsOption("backfillMissingEwb")) {
1127
                try {
1128
                    List<String> invoiceNumbers = Arrays.stream(
1129
                                    args.getOptionValues("invoiceNumbers").get(0).split(","))
1130
                            .map(String::trim).filter(x -> !x.isEmpty()).collect(Collectors.toList());
1131
                    boolean dryRun = args.containsOption("dryRun");
1132
                    System.out.println("backfillMissingEwb: " + invoiceNumbers.size()
1133
                            + " invoice(s), dryRun=" + dryRun);
1134
                    runOnceTasks.backfillMissingEwb(invoiceNumbers, dryRun);
1135
                } catch (Exception e) {
1136
                    e.printStackTrace();
1137
                }
1138
            }
1139
 
31753 tejbeer 1140
            if (args.containsOption("testIrnLive")) {
1141
                try {
1142
                    runOnceTasks.testIrnLive(args.getOptionValues("invoiceNumber").get(0));
1143
                } catch (Exception e) {
1144
                    e.printStackTrace();
1145
                }
1146
            }
30659 amit.gupta 1147
 
31753 tejbeer 1148
            if (args.containsOption("createoffercriteria")) {
1149
                try {
1150
                    runOnceTasks.createOfferCriteria();
1151
                } catch (Exception e) {
1152
                    e.printStackTrace();
1153
                }
1154
            }
30659 amit.gupta 1155
 
31753 tejbeer 1156
            if (args.containsOption("fix-price-drops")) {
1157
                runOnceTasks.fixPriceDrop();
1158
            }
29035 tejbeer 1159
 
31753 tejbeer 1160
            if (args.containsOption("processSchemeByIds")) {
1161
                List<String> schemeIds = Arrays.asList(args.getOptionValues("ids").get(0).split(","));
1162
                List<Integer> schemeIdsInt = schemeIds.stream().map(x -> Integer.parseInt(x)).collect(Collectors.toList());
1163
                runOnceTasks.processSchemeByIds(schemeIdsInt);
1164
            }
30859 tejbeer 1165
 
31753 tejbeer 1166
            if (args.containsOption("updateSaholicCISTable")) {
1167
                runOnceTasks.updateSaholicCISTable();
1168
            }
30859 tejbeer 1169
 
31753 tejbeer 1170
            if (args.containsOption("mapbag")) {
1171
                runOnceTasks.mapBag();
1172
            }
30859 tejbeer 1173
 
34579 vikas.jang 1174
            if (args.containsOption("todayBidPO")) {
34443 vikas.jang 1175
                runOnceTasks.processBids(ProfitMandiConstants.BID_CRON_ENUM.TODAY);
1176
            }
1177
 
34579 vikas.jang 1178
            if (args.containsOption("yesterdayBidPO")) {
1179
                runOnceTasks.processBids(ProfitMandiConstants.BID_CRON_ENUM.YESTERDAY);
1180
            }
1181
 
34547 vikas.jang 1182
            if (args.containsOption("biddingConsolidatedMessage")) {
1183
                runOnceTasks.consolidatedBiddingMessage();
1184
            }
1185
 
1186
            if (args.containsOption("sendMailWhatsAppAfterLoanDueDate")) {
1187
                scheduledTasks.sendMailWhatsAppAfterLoanDueDate();
1188
            }
1189
 
34836 vikas 1190
            if (args.containsOption("yesterdayTrackingReport")) {
1191
                runOnceTasks.yesterdayTrackingReport();
34770 vikas.jang 1192
            }
1193
 
31753 tejbeer 1194
            System.exit(0);
1195
        }
30859 tejbeer 1196
 
31753 tejbeer 1197
        if (args.containsOption("calculateInterestAccured")) {
30929 tejbeer 1198
 
31753 tejbeer 1199
            scheduledTasks.calculateInterestAccured();
1200
            System.exit(0);
1201
        }
30929 tejbeer 1202
 
31753 tejbeer 1203
        if (args.containsOption("loanSettlement")) {
30890 amit.gupta 1204
 
31753 tejbeer 1205
            scheduledTasks.loanSettlement();
1206
            System.exit(0);
1207
        }
30896 amit.gupta 1208
 
31753 tejbeer 1209
        if (args.containsOption("dailyLoanAlert")) {
30936 tejbeer 1210
 
31753 tejbeer 1211
            scheduledTasks.dailyLoanAlert();
1212
            System.exit(0);
1213
        }
30982 tejbeer 1214
 
36564 amit 1215
        if (args.containsOption("testFlagshipBilling")) {
1216
            int trId = Integer.parseInt(args.getOptionValues("testFlagshipBilling").get(0));
1217
            double amt = Double.parseDouble(args.getOptionValues("testFlagshipBillingAmount").get(0));
1218
            String inv = args.getOptionValues("testFlagshipBillingInvoice").get(0);
1219
            scheduledTasks.testFlagshipBilling(trId, amt, inv);
1220
            System.exit(0);
1221
        }
1222
 
36554 amit 1223
        if (args.containsOption("convertExpiredFlagshipCredits")) {
1224
            scheduledTasks.convertExpiredFlagshipCredits();
1225
            System.exit(0);
1226
        }
1227
 
36745 ranu 1228
        // Manual back-fill for missed-beat detection. Default: today.
1229
        // Usage: --detectMissedBeats [--date=YYYY-MM-DD]
1230
        if (args.containsOption("detectMissedBeats")) {
1231
            LocalDate date = LocalDate.now();
1232
            if (args.containsOption("date")) {
1233
                date = LocalDate.parse(args.getOptionValues("date").get(0));
1234
            }
1235
            int inserted = beatMissDetectorRunner.syncMissesForDate(date);
1236
            LOGGER.info("detectMissedBeats: {} miss rows inserted for {}", inserted, date);
1237
            System.exit(0);
1238
        }
1239
 
36554 amit 1240
        if (args.containsOption("notifyFlagshipExpiryIn2Days")) {
1241
            scheduledTasks.notifyFlagshipExpiryIn2Days();
1242
            System.exit(0);
1243
        }
1244
 
31753 tejbeer 1245
        if (args.containsOption("notifyDefaultLoans")) {
1246
            scheduledTasks.notifyDefaultLoans();
1247
            System.exit(0);
1248
        }
31446 amit.gupta 1249
 
31753 tejbeer 1250
        if (args.containsOption("fixinsurance")) {
1251
            runOnceTasks.addMissingWalletDebitsForInsurance();
1252
            System.exit(0);
1253
        }
31604 tejbeer 1254
 
31753 tejbeer 1255
        if (args.containsOption("processActivatedImeisForSchemes")) {
1256
            scheduledTasks.processActivatedImeisForSchemes();
1257
            System.exit(0);
1258
        }
31604 tejbeer 1259
 
36306 amit 1260
        if (args.containsOption("updatePartnerLimitWithBatch")) {
1261
            System.out.println("Running updatePartnerLimit with batch tracking");
1262
            batchScheduledTasks.updatePartnerLimitWithBatch();
1263
            System.exit(0);
1264
        }
1265
 
1266
        if (args.containsOption("processOffersWithBatch")) {
1267
            for (String val : args.getOptionValues("processOffersWithBatch")) {
1268
                for (String id : val.split(",")) {
1269
                    int offerId = Integer.parseInt(id.trim());
1270
                    System.out.println("Processing offer with batch: " + offerId);
1271
                    batchScheduledTasks.processOfferWithBatch(offerId);
1272
                }
1273
            }
1274
            System.exit(0);
1275
        }
1276
 
31753 tejbeer 1277
        if (args.containsOption("notifyLoanDueDateCross")) {
1278
            scheduledTasks.notifyLoanDueDateCross();
1279
            System.exit(0);
1280
        }
34275 tejus.loha 1281
        if (args.containsOption("sendTenOrMoreOrderStockReport")) {
1282
            scheduledTasks.send10OrMoreOlderStockReport();
1283
            System.exit(0);
1284
        }
31604 tejbeer 1285
 
31753 tejbeer 1286
        if (args.containsOption("alertForDueDate")) {
1287
            scheduledTasks.alertForDueDate();
1288
            System.exit(0);
1289
        }
31648 tejbeer 1290
 
31753 tejbeer 1291
        if (args.containsOption("fetchParnterStats")) {
1292
            scheduledTasks.fetchParnterStats();
1293
            System.exit(0);
1294
        }
1295
 
1296
        if (args.containsOption("morning")) {
1297
            if (args.containsOption("0")) {
1298
                scheduledTasks.sendPartnerInvestmentDetails();
1299
            }
1300
            if (args.containsOption("1")) {
1301
                scheduledTasks.sendIndentTertiary();
1302
            }
1303
            // 0
1304
            if (args.containsOption("2")) {
1305
                scheduledTasks.calculateInterestAccured();
1306
            }
1307
            System.out.println("scheduledTasks.calculateInterestAccured()");
1308
            // 0
1309
            if (args.containsOption("3")) {
32831 amit.gupta 1310
                orderTrackingService.markDelhiveryOrderDelivered();
31753 tejbeer 1311
            }
1312
            System.out.println("scheduledTasks.markDelhiveryOrderDelivered()");
1313
            // 1
1314
            if (args.containsOption("4")) {
1315
                scheduledTasks.processActivatedImeisForSchemes();
1316
            }
1317
            System.out.println("scheduledTasks.processActivatedImeisForSchemes()");
1318
            // 2
1319
            if (args.containsOption("5")) {
1320
                scheduledTasks.processActivation();
1321
            }
1322
            System.out.println("scheduledTasks.processActivation()");
1323
            // 4
1324
            if (args.containsOption("6")) {
1325
                scheduledTasks.processPriceDrop();
1326
            }
1327
            System.out.println("scheduledTasks.processPriceDrop()");
1328
            // 5
1329
            if (args.containsOption("7")) {
1330
                scheduledTasks.loanSettlement();
1331
            }
1332
            System.out.println("scheduledTasks.loanSettlement()");
36554 amit 1333
            if (args.containsOption("7a")) {
1334
                scheduledTasks.convertExpiredFlagshipCredits();
1335
                scheduledTasks.notifyFlagshipExpiryIn2Days();
1336
            }
1337
            System.out.println("scheduledTasks.convertExpiredFlagshipCredits()");
31753 tejbeer 1338
            // 8
1339
            if (args.containsOption("8")) {
1340
                scheduledTasks.reviewUncontactablePartner();
1341
            }
1342
            // 9
33859 tejus.loha 1343
//            if (args.containsOption("9")) {
1344
//                onBoardingRelatedSchelduleTask.storeTimelinePromoterPending();
1345
//            }
1346
//            // 9
1347
//            if (args.containsOption("10")) {
1348
//                onBoardingRelatedSchelduleTask.advancePaymentPendinglegalAlert();
1349
//            }
31753 tejbeer 1350
            // sendPartnerInvestment
1351
            if (args.containsOption("11")) {
1352
                scheduledTasks.sendPartnerInvestmentDetails();
1353
            }
37236 amit 1354
            if (args.containsOption("1")) {
36993 amit 1355
                // Defaults to a dry-run (harmless dev path); pass --live to run the real pipeline.
1356
                boolean dryRun = !args.containsOption("live");
1357
                System.out.println("Calling sendCreditNote (dryRun=" + dryRun + ")");
34029 ranu 1358
                YearMonth yearMonth = YearMonth.now().minusMonths(1);
36993 amit 1359
                scheduledTasks.sendCreditNote(yearMonth, dryRun);
31753 tejbeer 1360
            }
37258 amit 1361
            if (args.containsOption("syncHotDealFlags")) {
1362
                try {
1363
                    System.out.println("Calling syncHotDealFlags");
1364
                    scheduledTasks.syncHotDealFlags();
1365
                    System.out.println("syncHotDealFlags completed successfully");
1366
                } catch (Exception e) {
1367
                    System.err.println("syncHotDealFlags FAILED: " + e.getMessage());
1368
                    e.printStackTrace(System.err);
1369
                }
1370
            }
37238 amit 1371
            if (args.containsOption("regenMarginIrns")) {
1372
                // One-time: generate missing IRNs for issued margin CN/DNs (mixed-sign docs
1373
                // now netted per GST rate in the payload). Dry-run by default; --live to run.
1374
                boolean dryRun = !args.containsOption("live");
1375
                try {
1376
                    String ymStr = args.getOptionValues("regenMarginIrns").isEmpty() ? null : args.getOptionValues("regenMarginIrns").get(0);
1377
                    YearMonth yearMonth = ymStr != null && !ymStr.isEmpty() ? YearMonth.parse(ymStr) : YearMonth.now().minusMonths(1);
1378
                    System.out.println("regenMarginIrns for " + yearMonth + " (dryRun=" + dryRun + ")");
1379
                    scheduledTasks.regenMarginIrns(yearMonth, dryRun);
1380
                    System.out.println("regenMarginIrns completed successfully");
1381
                } catch (Exception e) {
1382
                    System.err.println("regenMarginIrns FAILED: " + e.getMessage());
1383
                    e.printStackTrace(System.err);
1384
                }
1385
            }
37236 amit 1386
            if (args.containsOption("cancelMarginDnIrns")) {
1387
                // One-time: cancel IRNs of margin DNs inflated by the abs bug (24h NIC window!)
1388
                // and mark them cancelled so a sendCreditNote rerun reissues corrected DNs.
1389
                // Defaults to dry-run; pass --live to actually cancel.
1390
                boolean dryRun = !args.containsOption("live");
1391
                try {
1392
                    String ymStr = args.getOptionValues("cancelMarginDnIrns").isEmpty() ? null : args.getOptionValues("cancelMarginDnIrns").get(0);
1393
                    YearMonth yearMonth = ymStr != null && !ymStr.isEmpty() ? YearMonth.parse(ymStr) : YearMonth.now().minusMonths(1);
1394
                    System.out.println("cancelMarginDnIrns for " + yearMonth + " (dryRun=" + dryRun + ")");
1395
                    scheduledTasks.cancelMarginDnIrns(yearMonth, dryRun);
1396
                    System.out.println("cancelMarginDnIrns completed successfully");
1397
                } catch (Exception e) {
1398
                    System.err.println("cancelMarginDnIrns FAILED: " + e.getMessage());
1399
                    e.printStackTrace(System.err);
1400
                }
1401
            }
37232 amit 1402
            if (args.containsOption("corrMarginCNs")) {
1403
                // One-time corrective CNs against wrongly-inflated margin DNs.
1404
                // Defaults to dry-run; pass --live to issue real documents.
1405
                boolean dryRun = !args.containsOption("live");
1406
                try {
1407
                    String ymStr = args.getOptionValues("corrMarginCNs").isEmpty() ? null : args.getOptionValues("corrMarginCNs").get(0);
1408
                    YearMonth yearMonth = ymStr != null && !ymStr.isEmpty() ? YearMonth.parse(ymStr) : YearMonth.now().minusMonths(1);
1409
                    System.out.println("corrMarginCNs for " + yearMonth + " (dryRun=" + dryRun + ")");
1410
                    scheduledTasks.corrMarginCNs(yearMonth, dryRun);
1411
                    System.out.println("corrMarginCNs completed successfully");
1412
                } catch (Exception e) {
1413
                    System.err.println("corrMarginCNs FAILED: " + e.getMessage());
1414
                    e.printStackTrace(System.err);
1415
                }
1416
            }
36220 amit 1417
            if (args.containsOption("genDNs")) {
1418
                System.out.println("Calling genDNs");
36254 amit 1419
                try {
1420
                    String ymStr = args.getOptionValues("genDNs").isEmpty() ? null : args.getOptionValues("genDNs").get(0);
1421
                    YearMonth yearMonth = ymStr != null ? YearMonth.parse(ymStr) : YearMonth.now().minusMonths(1);
1422
                    System.out.println("genDNs for " + yearMonth);
1423
                    scheduledTasks.genDNs(yearMonth);
1424
                    System.out.println("genDNs completed successfully");
1425
                } catch (Exception e) {
1426
                    System.err.println("genDNs FAILED: " + e.getMessage());
1427
                    e.printStackTrace(System.err);
1428
                }
36220 amit 1429
            }
36503 amit 1430
            if (args.containsOption("genDNsForCNs")) {
1431
                System.out.println("Calling genDNsForCNs");
1432
                try {
1433
                    String cnList = args.getOptionValues("genDNsForCNs").get(0);
1434
                    List<String> cnNumbers = Arrays.asList(cnList.split(","));
1435
                    System.out.println("genDNsForCNs for " + cnNumbers.size() + " CNs: " + cnNumbers);
1436
                    scheduledTasks.genDNsForCNs(cnNumbers);
1437
                    System.out.println("genDNsForCNs completed successfully");
1438
                } catch (Exception e) {
1439
                    System.err.println("genDNsForCNs FAILED: " + e.getMessage());
1440
                    e.printStackTrace(System.err);
1441
                }
1442
            }
36433 amit 1443
            System.exit(0);
1444
        }
1445
 
31753 tejbeer 1446
    }
24848 amit.gupta 1447
}