Subversion Repositories SmartDukaan

Rev

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